Reader和InputStream有什么区别?

问题描述 投票:74回答:4

Reader和InputStream有什么区别?什么时候用?如果我可以使用Reader读取字符,为什么我会使用inputstream,我想读取对象?

java file inputstream filereader fileinputstream
4个回答
117
投票

InputStream是从资源获取信息的原始方法。它逐字节地抓取数据而不执行任何类型的转换。如果您正在读取图像数据或任何二进制文件,则这是要使用的流。

Reader专为字符流而设计。如果您正在阅读的信息都是文本,那么Reader将为您处理字符解码,并从原始输入流中为您提供unicode字符。如果您正在阅读任何类型的文本,则这是要使用的流。

您可以使用InputStreamReader类包装InputStream并将其转换为Reader。

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

17
投票

InputStream用于从流中读取字节。因此它们对二进制数据非常有用,例如图像,视频和序列化对象。

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


6
投票

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

区别在于InputStream.read()返回0到255之间的字节值,对应于字节流的原始内容,Reader.read()返回0到65357之间的字符值

InputStream允许你逐字节读取内容,例如内容“a‡a”被读作5字节的流,即9722612816197,其中a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161

Reader允许你逐个字符地阅读内容,所以内容“a‡a”被读作3个字符97822597,其中a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0x2021 -> 8225


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.