FileReader的优势与FileInputStream相比具有优势

时间:2014-01-04 22:02:02

标签: java io

根据我在Stack Overflow上可以阅读的内容, FileReader 只接受文件, FileInputStream 可以读取所有文件。但是使用 FileReader 有什么好处吗?它更快吗?

我读到了:

  

“FileReader不允许您指定编码而是使用   平台默认编码,这使它几乎无用   当代码在系统上运行时,使用它将导致数据损坏   使用不同的平台默认编码。“

但是没有得到它。平台默认编码是什么意思?

6 个答案:

答案 0 :(得分:14)

主要区别是:
- 基于字节(读取或写入字节)
读者 - 基于字符(读或写字符)

答案 1 :(得分:12)

  • InputStream是一个可以从中读取字节的流。你通常不会直接使用这个类,但如果你这样做,你就会期待二进制数据。它有许多不同的子类用于来自不同来源的输入,例如FileInputStreamAudioInputStreamStringBufferInputStream等等。

  • InputStreamReaderInputStream的包装器,它使用您喜欢的任何编码将流的字节转换为字符。通常,您在创建InputStreamReader时指定字符编码。有一些不同的构造函数可以让你这样做。如果要阅读文本数据,可以使用InputStreamReader。首先让您的InputStream读取数据,然后将其换成InputStreamReader

  • FileReader是一个专门的InputStreamReader,只能读取文件,并使用默认的平台编码。换句话说,它假定它所读取的文件是根据操作系统的平台编码设置创建的。这通常没问题;但如果您要阅读使用不同编码的文件,则应创建FileInputStream并将其包装在InputStreamReader中。

答案 2 :(得分:2)

平台默认编码,表示运行JVM的操作系统使用的编码。

答案 3 :(得分:2)

如果您在Windows中,请转到控制面板 - >区域和语言选项控制面板 - >高级那里你会看到默认编码。 FileReader始终使用该编码。

FileReader与FileInputStream的不同之处在于FileReader用于读取默认编码的文本文件,而FileInputStream用于读取二进制文件。

答案 4 :(得分:0)

FileReader是字符流,而FileInputStream是字节流。在第一种情况下,默认编码是相关的(例如,将InputStreamReader视为中间桥)。

如果您想要字符流的另一种编码(即Reader),请使用:

FileInputStream in = ...;
String charSet = ...; // for example UTF-8
Reader reader = new InputStreamReader(in, charSet);

答案 5 :(得分:0)

FileInputStreamFileOutputStream用于对象序列化/反序列化。 如果你需要使用字节,也可以使用它。

在其他情况下,您需要字符,因此您应该使用FileReader / FileWriter。 例如:

BufferedReader readFile = new BufferedReader(new FileReader(file));