2010-03-11 68 views
14

今天我得到了这个问题,我认为我的回答非常糟糕。我说流是一种流动的数据,读者是一种技术,我们从中读取的是一种静态数据。我知道这是一个可怕的答案,所以请用Java中的示例向我提供这两者之间的明显区别和定义。Java中的流和读者之间有什么区别?

谢谢。

回答

11

正如其他人所说,在具体使用情况略有不同(尽管它们经常可以互换使用)

由于读者阅读的人物,他们是更好的,当你正在处理输入这是文本性质的(或者以字符表示的数据)。我说得更好,因为读者(在典型用法的背景下)本质上是流式方法,可以方便地读取字符输入。

+1

+1这真的是关键,Reader通常由某种类型的InputStream(并非总是 - 请参阅StringReader)支持,并将字节转换为16位unicode字符。 – Yishai 2010-03-11 19:56:02

9

流是读取字节,读取器是读取字符。一个字符可能需要一个字节或更多,具体取决于字符集。

+0

一个字符在Java中是至少2个字节,正确吗? – 2014-01-28 04:20:07

+0

从流中读取时,通过编码给出字节和字符之间的映射。对于UTF-8,一个字符可以在1到6个字节之间。 – 2014-01-28 10:07:23

16

InputStream是面向字节的。读者是面向字符的。

javadocs是你的朋友,解释不同之处。 ReaderInputStream

+3

不用说RTFM。 – 2010-03-11 19:49:54

+0

什么是RTFM的扩展? – bragboy 2010-03-11 19:56:11

+3

RTFM ==阅读指南 – NomeN 2010-03-11 20:07:54

5

流类是面向字节的类,这意味着类的所有InputStream类(缓冲和非缓冲)从流中逐字节读取数据,所有OutputStream(缓冲和非缓冲)类将数据逐字节写入流。如果数据量较小或者您正在处理二进制文件(如图像),则流类很有用。

另一方面,Reader/Writer是基于字符的类。这些类在读取或写入流中的一个字符时读取或写入。这些类扩展了java.io.Reader(全部字符输入类)或java.io.Writer(全部字符输出类)。如果您正在处理文本文件或其他文本流,这些类很有用。这些类别也是BufferedNon-Buffered

相关问题