Reader和InputStream有什么区别?什么时候用?如果我可以使用Reader读取字符,为什么我会使用inputstream,我想读取对象?
InputStream是从资源获取信息的原始方法。它逐字节地抓取数据而不执行任何类型的转换。如果您正在读取图像数据或任何二进制文件,则这是要使用的流。
Reader专为字符流而设计。如果您正在阅读的信息都是文本,那么Reader将为您处理字符解码,并从原始输入流中为您提供unicode字符。如果您正在阅读任何类型的文本,则这是要使用的流。
您可以使用InputStreamReader类包装InputStream并将其转换为Reader。
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
InputStream用于从流中读取字节。因此它们对二进制数据非常有用,例如图像,视频和序列化对象。
另一方面,读者是字符流,因此它们最适合用于读取字符数据。
我猜混淆的根源是InputStream.read()
返回int
而Reader.read()
也返回int
。
区别在于InputStream.read()
返回0到255之间的字节值,对应于字节流的原始内容,Reader.read()
返回0到65357之间的字符值
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
。
一个接受字节,另一个接受字符。