Reader和InputStream有什么区别?

sab*_*sab 80 java inputstream file filereader fileinputstream

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

Ber*_*sch 123

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

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

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

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)


Vin*_*nie 17

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

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


ece*_*ulm 7

我猜混淆的根源是InputStream.read()返回一个int并且Reader.read()还返回一个int.

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

一个InputStream可让您读取的内容逐字节,例如,内容"一‡一个"读为5个字节的流,即97,226,128,161和97,其中97a -> U+0061 -> 0x61 -> 97.

一个‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161可以让你通过文字阅读的内容字符,这样的内容"一‡一个"读为3个字符Reader,978225在那里97a -> U+0061 -> 0x61 -> 97.