今天我得到了这个问题,我认为我的回答非常糟糕。我说流是一种流动的数据,读者是一种技术,我们从中读取的是一种静态数据。我知道这是一个可怕的答案,所以请用Java中的示例向我提供这两者之间的明显区别和定义。Java中的流和读者之间有什么区别?
谢谢。
今天我得到了这个问题,我认为我的回答非常糟糕。我说流是一种流动的数据,读者是一种技术,我们从中读取的是一种静态数据。我知道这是一个可怕的答案,所以请用Java中的示例向我提供这两者之间的明显区别和定义。Java中的流和读者之间有什么区别?
谢谢。
正如其他人所说,在具体使用情况略有不同(尽管它们经常可以互换使用)
由于读者阅读的人物,他们是更好的,当你正在处理输入这是文本性质的(或者以字符表示的数据)。我说得更好,因为读者(在典型用法的背景下)本质上是流式方法,可以方便地读取字符输入。
流是读取字节,读取器是读取字符。一个字符可能需要一个字节或更多,具体取决于字符集。
一个字符在Java中是至少2个字节,正确吗? – 2014-01-28 04:20:07
从流中读取时,通过编码给出字节和字符之间的映射。对于UTF-8,一个字符可以在1到6个字节之间。 – 2014-01-28 10:07:23
InputStream是面向字节的。读者是面向字符的。
javadocs是你的朋友,解释不同之处。 Reader,InputStream
流类是面向字节的类,这意味着类的所有InputStream
类(缓冲和非缓冲)从流中逐字节读取数据,所有OutputStream
(缓冲和非缓冲)类将数据逐字节写入流。如果数据量较小或者您正在处理二进制文件(如图像),则流类很有用。
另一方面,Reader/Writer
是基于字符的类。这些类在读取或写入流中的一个字符时读取或写入。这些类扩展了java.io.Reader
(全部字符输入类)或java.io.Writer
(全部字符输出类)。如果您正在处理文本文件或其他文本流,这些类很有用。这些类别也是Buffered
和Non-Buffered
。
+1这真的是关键,Reader通常由某种类型的InputStream(并非总是 - 请参阅StringReader)支持,并将字节转换为16位unicode字符。 – Yishai 2010-03-11 19:56:02