Reader和InputStream有什么区别?
或者换句话说,“字节流”和“字符流”之间的区别是什么?
我想知道何时应该使用InputStream或者Reader,你能否建议我自己理解这个问题的材料?
答案 0 :(得分:8)
一个是字节序列(二进制数据),另一个是字符序列(文本)。字节和字符是完全不同的东西(不要相信C标准,它就在于它!)。您可以使用字符编码在它们之间进行转换 - 这就是例如InputStreamReader
确实如此。
答案 1 :(得分:2)
基本I / O问题导致Basic I/O tutorial:)
InputStream
/ OutputStream
处理字节,Reader
/ Writer
处理多字节字符。
答案 2 :(得分:1)
基本上,Reader使用对人类可读文本有用的类型char
。
...用于阅读字符流的课程......
Stream直接使用对二进制数据有用的类型byte
。
.. class [..]表示输入的字节流...
链接以进一步阅读:Java I/O streams
引用:
除非您使用的是二进制数据,例如图像和声音文件,否则您应该使用读者和编写者(字符流)来读取和写入信息,原因如下:
- 它们可以处理Unicode字符集中的任何字符(而字节流仅限于ISO-Latin-1 8位字节)。
- 它们更容易国际化,因为它们不依赖于特定的字符编码。
- 他们在内部使用缓冲技术,因此可能比字节流更有效。
文章的日期为'98,但它仍然有效。
答案 3 :(得分:0)
来自Java - Primitive Data Types:
byte:字节数据类型是一个8位带符号的二进制补码整数。 它的最小值为-128和a 最大值127(含)。该 字节数据类型可用于 在大型数组中保存内存,其中 记忆储蓄实际上很重要。 它们也可以用来代替int 他们的限制有助于澄清 你的代码;一个变量的事实 范围有限可以作为一种形式 文件。
char: char数据类型是一个16位Unicode字符。它 最小值为'\ u0000'(或0) 和'\ uffff'的最大值(或 65,535(含))。
答案 4 :(得分:0)
InputStreams处理最低级别的原始数据。读者处于略高的抽象层次,处理字符(最终仍然在底层字节流中编码)
答案 5 :(得分:0)
作为涵盖Java IO的大型教程的一部分,可以很好地概述各种InputStream,OutputStreams,Reader和Writer的差异:
答案 6 :(得分:0)
简单说明:在记事本或其他文本编辑器中打开感兴趣的文件。可以你读它,好像它是一种自然语言吗?那么你可能需要一个Reader
来用Java读取它,你最终会得到字符串。你反而看到一些“垃圾”吗?然后你需要InputStream
来用Java读取它,你最终会得到字节数组(或流)。二进制文件的已知示例是图像文件(gif,jpg,png等)和office文档(doc,xls,ppt,pdf等)。
您也可以使用InputStream
打开文本文件,但实际上您不希望使用Reader
打开二进制文件,因为无法进行任何字符编码。使用OutputStream
和Writer
时也会遇到同样的情况。在任何情况下都不要使用Writer
来创建二进制文件。