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和FileWriter仅用于读取和写入文本?
发布于 2011-03-01 21:40:18
是的,您的结论是正确的,Reader和Writer的子类用于读/写文本内容。InputStream / OutputStream用于二进制内容。如果你看一下文档:
Reader-用于读取字符流的抽象类
InputStream -抽象类是表示输入字节流的所有类的超类。
发布于 2011-03-01 21:40:56
FileReader (实际上是任何扩展阅读器的东西)确实是用于文本的。从documentation of Reader
用于读取字符流的
抽象类。
(重点是我的。)看看这个应用程序接口,你会发现这一切都是用text - char而不是byte来实现的。
InputStream和OutputStream用于二进制数据,如mp4文件。
但就我个人而言,我会完全避免使用FileReader,因为它总是使用系统默认的字符编码--至少在Java11之前是这样。相反,在FileInputStream周围使用InputStreamReader……但仅当您想要处理文本时。(或者,使用Files.newBufferedReader。)
顺便说一句,这是一种从输入复制到输出的非常低效的方式……使用read和write的重载,它们从缓冲区( byte[]或char[] )读取或写入。否则,您将为文件中的每个字节/字符调用read和write。
您还应该关闭finally块中的IO流,以便即使在处理它们时抛出异常,它们也会被关闭。
发布于 2014-04-29 14:24:13
FileInputStream用于读取原始数据字节的流,如原始图像。另一方面,FileReaders用于读取字符流
FileInputStream和FileReader之间的区别是,FileInputStream逐字节读取文件,而FileReader逐个字符读取文件。
因此,当您尝试读取包含字符"Č"的文件时,在FileInputStream中将结果显示为196 140,因为Č的ASCII值为268。
在FileReader中,返回的结果为268,这是ASCII Č的字符值。
https://stackoverflow.com/questions/5155226
复制相似问题