读者和Inputstream有什么区别?
-
09-10-2019 - |
题
读者和Inputstream有什么区别?什么时候使用什么?如果我可以使用阅读器来读取字符,为什么我会使用InputStream,我想可以阅读对象?
解决方案
输入流是从资源获取信息的原始方法。它可以通过字节抓住数据,而无需执行任何类型的翻译。如果您正在读取图像数据或任何二进制文件,则是要使用的流。
读者是为角色流设计的。如果您正在阅读的信息全部文本,那么读者将为您负责解码的字符,并从原始输入流提供Unicode字符。如果您正在阅读任何类型的文本,这是要使用的流。
您可以使用InputStreamReader类包装输入流并将其变成读者。
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
其他提示
InputStreams用于从流中读取字节。因此,它们对于图像,视频和序列化对象等二进制数据很有用。
另一方面,读者是字符流,因此最好用于读取字符数据。
我想混乱的根源是 InputStream.read()
返回 int
和 Reader.read()
也返回 int
.
区别在于 InputStream.read()
返回字节值在0到255之间,与字节流的原始内容相对应 Reader.read()
返回0和65357之间的字符值(因为有65358个不同的Unicode编码点)
一个 InputStream
让您可以通过字节读取内容字节,例如内容“ a‡a”读为5个字节的流,即,即 97
, 226
, 128
, 161
和 97
在哪里 a -> U+0061 -> 0x61 -> 97
和 ‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161
.
一个 Reader
让您按字符读取内容,因此内容“ a‡a”读为3个字符 97
, 8225
和 97
在哪里 a -> U+0061 -> 0x61 -> 97
和 ‡ -> U+2021 -> 0x2021 -> 8225
.
一个接受字节,而另一个接受字符。