InputStream类提供用于读取字节数据的流,而Reader类提供字符数据的流。 为了从流中读取字符数据,我们使用InputStreamReader,它实际上是一个将字节流转换为字符流的桥。 是不是可以直接从流中读取字符数据,而不是最初将其作为字节流读取,然后将其转换为字符流?
答案 0 :(得分:4)
不,不是。
其中一个原因是,根据文件使用的字符编码,相同的字符可能用不同的字节数表示。
以é
为例(注意重音):
这就是为什么在打开Reader
时选择正确的字符编码(这是Charset
类在Java中体现的内容)至关重要的原因;另请参阅{{3} }和CharsetDecoder
)。
同样的考虑适用于,例如,HTTP,XML等:所有这些技术都有这样或那样的方式来指定使用什么字符编码,以便“读者”能够正确读取它。
(这甚至没有提到相同的字符可能,取决于使用的编码,由不同的字节集表示...还记得EBCDIC吗?)
答案 1 :(得分:0)
输入流读取原始字节,而根据字符编码从字符串派生字符。
关于你的问题,你不能直接从流中读取字符,因为没有字符而只有字节序列。你需要字符流来将字节转换成字符。