Потоки байтов
Поток байтов получает доступ к файлу байт за байтом. Программы Java используют потоки байтов для выполнения ввода и вывода 8-битных байтов. Он подходит для любого типа файлов, однако не совсем подходит для текстовых файлов. Например, если в файле используется кодировка unicode и символ представлен двумя байтами, поток байтов будет обрабатывать их отдельно, и вам нужно будет выполнить преобразование самостоятельно. Байт-ориентированные потоки не используют никакой схемы кодирования, в то время как символьно-ориентированные потоки используют схему кодирования символов (UNICODE). Все классы потока байтов являются потомками InputStream и OutputStream .
Поток символов
Символьный поток будет считывать файл символ за символом. Символьный поток – это концепция более высокого уровня, чем поток байтов. Поток символов – это, по сути, поток байтов, который был обернут логикой, позволяющей ему выводить символы из определенной кодировки. Это означает, что для правильной работы потоку символов необходимо присвоить кодировку файла. Символьный поток может поддерживать все типы наборов символов ASCII, Unicode, UTF-8, UTF-16 и т.д. Все классы символьного потока происходят от Reader и Writer.
Если вы попытаетесь выполнить чтение из файла .txt , который был записан в кодировке Uni-8, которая по умолчанию используется в java, то чтение файла как с помощью классов Reader, так и InputStream даст одинаковый результат. Как и здесь, каждый байт представляет собой один символ.
Я создал несколько методов, которые помогут вам понять разницу между этими двумя терминами — FileInputStream считывает байт за байтом Программа чтения файлов считывает символ за символом .
Давайте углубимся в эти концепции с примерами.
Теперь, когда у вас есть представление об этих двух потоках, давайте посмотрим на примеры, чтобы понять, как это работает внутри.
Способ записи некоторых данных в файл с использованием кодировки Unicode 16
В output.txt файл будет содержать Привет, мир в нем.
Это 3 способа чтения из файла: сначала с помощью программы чтения файлов по умолчанию, затем с помощью FileInputStream, а затем с помощью InputStreamReader с кодировкой Unicode-16 (кодировка).
Комментарии к методам не требуют пояснений, пожалуйста, прочтите их, чтобы получить четкое представление о том, как это работает.
Средство чтения файлов
Вывод будет выводом FileInputStream, считывающего байт за байтом: þ
FileInputStream
Вывод будет выводом FileInputStream, считывающего байт за байтом: þ
InputStreamReader
Вывод будет/| uni-16 ISR: H
Итак, используя InputStreamReader мы можем прочитать файл.
Надеюсь, это прояснит некоторые сомнения относительно того, как работает Java IO.
Здесь есть ссылка на обсуждение stackoverflow , вы также можете найти мой ответ там.
Спасибо или читаете:)
Если у вас есть какие-либо вопросы относительно этого или чего-либо, что я должен добавить, исправить или удалить, не стесняйтесь комментировать, писать мне по электронной почте или по электронной почте. Еще раз спасибо!!
Оригинал: “https://dev.to/arpan_banerjee7/fileinputstream-vs-filereader-in-java-3je4”