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)
我猜混淆的根源是InputStream.read()返回一个int并且Reader.read()还返回一个int.
不同之处在于InputStream.read()返回0到255之间的字节值,对应于字节流的原始内容,并Reader.read()返回0到65357之间的字符值
一个InputStream可让您读取的内容逐字节,例如,内容"一‡一个"读为5个字节的流,即97,226,128,161和97,其中97和a -> U+0061 -> 0x61 -> 97.
一个‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161可以让你通过文字阅读的内容字符,这样的内容"一‡一个"读为3个字符Reader,97并8225在那里97和a -> U+0061 -> 0x61 -> 97.