读者和Inputstream有什么区别?什么时候使用什么?如果我可以使用阅读器来读取字符,为什么我会使用InputStream,我想可以阅读对象?

有帮助吗?

解决方案

输入流是从资源获取信息的原始方法。它可以通过字节抓住数据,而无需执行任何类型的翻译。如果您正在读取图像数据或任何二进制文件,则是要使用的流。

读者是为角色流设计的。如果您正在阅读的信息全部文本,那么读者将为您负责解码的字符,并从原始输入流提供Unicode字符。如果您正在阅读任何类型的文本,这是要使用的流。

您可以使用InputStreamReader类包装输入流并将其变成读者。

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);

其他提示

InputStreams用于从流中读取字节。因此,它们对于图像,视频和序列化对象等二进制数据很有用。

另一方面,读者是字符流,因此最好用于读取字符数据。

我想混乱的根源是 InputStream.read() 返回 intReader.read() 也返回 int.

区别在于 InputStream.read() 返回字节值在0到255之间,与字节流的原始内容相对应 Reader.read() 返回0和65357之间的字符值(因为有65358个不同的Unicode编码点)

一个 InputStream 让您可以通过字节读取内容字节,例如内容“ a‡a”读为5个字节的流,即,即 97, 226, 128, 16197 在哪里 a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161.

一个 Reader 让您按字符读取内容,因此内容“ a‡a”读为3个字符 97, 822597 在哪里 a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0x2021 -> 8225.

一个接受字节,而另一个接受字符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top