InputStream 类提供用于读取字节数据的流,而 Reader 类提供用于字符数据的流。为了从流中读取字符数据,我们使用 InputStreamReader,它实际上是一个将字节流转换为字符流的桥梁。是否可以直接从流中读取字符数据,而不是最初将其作为字节流读取,然后将其转换为字符流?
问问题
121 次
2 回答
4
不,不是。
原因之一是根据文件使用的字符编码,相同的字符可能用不同的字节数表示。
举é
个例子(注意重音):
- 在 ISO-8859-1 中,它将是一个字节;
- 在 UTF-8 中,它将是两个字节;
- 在 UTF-32 中,它将是 4 个字节!
Reader
这就是为什么当您打开 a时,选择正确的字符编码(这就是Charset
Java 中的类所体现的内容;另请参见CharsetDecoder
和)至关重要CharsetEncoder
。
例如,同样的考虑适用于 HTTP、XML 等:所有这些技术都有一种或另一种方式来指定使用什么字符编码,以便“阅读器”能够正确读取它。
(这甚至没有提到,根据所使用的编码,相同的字符可能由不同的字节集表示……还记得 EBCDIC 吗?)
于 2013-06-24T11:13:02.407 回答
0
输入流读取原始字节,而字符是根据字符编码从流中派生的。
关于您的问题,您不能直接从流中读取字符,因为没有字符,只有字节序列。您需要字符流将字节转换为字符。
于 2013-06-24T11:16:11.467 回答