用Java读取字符流

时间:2013-06-24 11:10:52

标签: java

InputStream类提供用于读取字节数据的流,而Reader类提供字符数据的流。 为了从流中读取字符数据,我们使用InputStreamReader,它实际上是一个将字节流转换为字符流的桥。 是不是可以直接从流中读取字符数据,而不是最初将其作为字节流读取,然后将其转换为字符流?

2 个答案:

答案 0 :(得分:4)

不,不是。

其中一个原因是,根据文件使用的字符编码,相同的字符可能用不同的字节数表示。

é为例(注意重音):

  • 在ISO-8859-1中,它将是一个字节;
  • 在UTF-8中,它将是两个字节;
  • 在UTF-32中,它将是4个字节!

这就是为什么在打开Reader时选择正确的字符编码(这是Charset类在Java中体现的内容)至关重要的原因;另请参阅{{3} }和CharsetDecoder)。

同样的考虑适用于,例如,HTTP,XML等:所有这些技术都有这样或那样的方式来指定使用什么字符编码,以便“读者”能够正确读取它。

(这甚至没有提到相同的字符可能,取决于使用的编码,由不同的字节集表示...还记得EBCDIC吗?)

答案 1 :(得分:0)

输入流读取原始字节,而根据字符编码从字符串派生字符。

关于你的问题,你不能直接从流中读取字符,因为没有字符而只有字节序列。你需要字符流来将字节转换成字符。