首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileInputStream vs FileReader

FileInputStream vs FileReader
EN

Stack Overflow用户
提问于 2011-03-01 21:38:18
回答 6查看 53K关注 0票数 49
代码语言:javascript
复制
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();

当我使用FileReaderFileWriter读写mp4文件时,output.mp4文件不能很好地呈现。但当我使用FileInputStreamFileOutputStream时,它工作得很好。

那么,我是否可以得出结论:FileReaderFileWriter仅用于读取和写入文本?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-01 21:40:18

是的,您的结论是正确的,ReaderWriter的子类用于读/写文本内容。InputStream / OutputStream用于二进制内容。如果你看一下文档:

Reader -用于读取字符流的抽象类

InputStream -抽象类是表示输入字节流的所有类的超类。

票数 58
EN

Stack Overflow用户

发布于 2011-03-01 21:40:56

FileReader (实际上是任何扩展阅读器的东西)确实是用于文本的。从documentation of Reader

用于读取字符流

抽象类。

(重点是我的。)看看这个应用程序接口,你会发现这一切都是用text - char而不是byte来实现的。

InputStreamOutputStream用于二进制数据,如mp4文件。

但就我个人而言,我会完全避免使用FileReader,因为它总是使用系统默认的字符编码--至少在Java11之前是这样。相反,在FileInputStream周围使用InputStreamReader……但仅当您想要处理文本时。(或者,使用Files.newBufferedReader。)

顺便说一句,这是一种从输入复制到输出的非常低效的方式……使用readwrite的重载,它们从缓冲区( byte[]char[] )读取或写入。否则,您将为文件中的每个字节/字符调用read和write。

您还应该关闭finally块中的IO流,以便即使在处理它们时抛出异常,它们也会被关闭。

票数 39
EN

Stack Overflow用户

发布于 2014-04-29 14:24:13

FileInputStream用于读取原始数据字节的流,如原始图像。另一方面,FileReaders用于读取字符流

FileInputStreamFileReader之间的区别是,FileInputStream逐字节读取文件,而FileReader逐个字符读取文件。

因此,当您尝试读取包含字符"Č"的文件时,在FileInputStream中将结果显示为196 140,因为ČASCII值为268

FileReader中,返回的结果为268,这是ASCII Č的字符值。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5155226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档