Подтвердить что ты не робот

FileInputStream vs FileReader

FileReader rd=new FileReader("new.mp4");
FileWriter wr=new FileWriter("output.mp4");
int ch;
while((ch=rd.read())!=-1)
  wr.write(ch);

wr.flush();
wr.close();

когда я использую FileReader и FileWriter для чтения и записи файла mp4.... Файл output.mp4 не может быть хорошо отображен.... но когда я использовал FileInputStream и FileOutputStream, он работал хорошо.

так что я могу заключить FileReader, а писатель только для чтения и записи только текста?

4b9b3361

Ответ 1

Да, ваш вывод - это правильные подклассы Reader и Writer для чтения/записи текстового содержимого. InputStream/OutputStream предназначены для двоичного содержимого. Если вы посмотрите на документацию:

Reader - Абстрактный класс для чтения потоков символов

InputStream - Абстрактный класс является суперклассом всех классов, представляющих входной поток байтов.

Ответ 2

FileReader (и, действительно, все, что распространяется на Reader) действительно для текста. Из документации Reader:

Абстрактный класс для чтения потоков символов.

(Emphasis mine.) Посмотрите API, и вы увидите, что все это связано с текстом - char вместо byte повсюду.

InputStream и OutputStream предназначены для двоичных данных, таких как файлы mp4.

Лично я бы избегал FileReader вообще, хотя, поскольку он всегда использует кодировку по умолчанию для системы по умолчанию. Вместо этого используйте InputStreamReader вокруг a FileInputStream... но только тогда, когда вы хотите иметь дело с текстом.

В стороне, что очень неэффективный способ копирования из ввода на вывод... используйте перегрузки read и write, которые считывают или записывают из буфера - либо byte[], либо char[]. В противном случае вы вызываете чтение и запись для каждого байта/символа в файле.

Вы должны также закрыть потоки ввода-вывода в блоках finally, чтобы они были закрыты, даже если при обработке их выдается исключение.

Ответ 3

FileInputStream используется для чтения потоков необработанных байтов данных, таких как сырые изображения. FileReaders, с другой стороны, используются для чтения потоков символов

Разница между FileInputStream и FileReader заключается в том,   FileInputStream читает байтовый файл байтом, а FileReader считывает символ файла по символу.

Поэтому, когда вы пытаетесь прочитать файл, содержащий символ "Č", в FileInputStream даст результат как 196 140, так как значение ASCII Č равно 268.

В FileReader будет представлен результат как 268, который является значением ASCII для char Č.

Ответ 4

"FileWriter предназначен для записи потоков символов. Для записи потоков необработанных байтов следует использовать FileOutputStream.

http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.html

FileWriter и FileReader предназначены для потоков символов...

С наилучшими пожеланиями.

Furkan

Ответ 5

Текстовый файл можно читать с использованием как fileReader, так и fileInputStream, но mp3 и png можно читать только с помощью fileInputStream

  • fileReader читает char на char

  • fileInputStream читает байт по байту