Кажется, я не могу определить разницу между InputStreamReader
и FileReader
, кроме того, как они инициализируются. Есть ли какая-либо польза от использования того или другого? Большинство других статей охватывают FileInputStream
vs InputStreamReader
, но вместо этого я противопоставляю FileReader
. Мне кажется, что обе они имеют ту же цель.
InputStreamReader против FileReader
Ответ 1
Во-первых, InputStreamReader
может обрабатывать все входные потоки, а не только файлы. Другими примерами являются сетевые подключения, ресурсы classpath и файлы ZIP.
Во-вторых, FileReader
до тех пор, пока Java 11 не позволяла вам указывать кодировку, а вместо этого использовала только кодировку по умолчанию для платформы, что делало ее практически бесполезной, поскольку ее использование приводило бы к повреждению данных, когда код запускался в системах с другой платформой по умолчанию. кодировок.
Начиная с Java 11, FileReader
является полезным ярлыком для наматывания InputStreamReader
вокруг FileInputStream
.
Ответ 2
FileReader читает символ из файла в файловой системе. InputStreamReader считывает символы из любого входного потока. Каналом потока является FileInputStream, но также может быть потоком, полученным из сокета, HTTP-соединения, блочной базы данных и т.д.
Обычно я предпочитаю использовать InputStreamReader, который обертывает FileInputStream для чтения из файла, потому что он позволяет указать конкретную кодировку символов.
Ответ 3
FileReader расширяет InputStreamReader. Единственное отличие состоит в том, что FileReader имеет конструкторы, которые предполагают, что вы читаете из файла, такого как String filename
, File file
и FileDescriptor fd
Я предлагаю вам взглянуть на источник для FileReader, чтобы узнать больше.