Java中的流和读取器之间有什么区别?

Java中的流和读取器之间有什么区别?,java,stream,Java,Stream,今天我问了这个问题,我想我回答得很糟糕。我说过流是一种流动的数据,读卡器是一种技术,我们从中读取的是静态数据。我知道这是一个糟糕的答案,所以请用Java示例向我提供这两者之间的清晰区别和定义 谢谢。流用于读取字节,读卡器用于读取字符。一个字符可能包含一个字节或多个字节,具体取决于字符集。输入流是面向字节的。读者是以性格为导向的 javadocs是你的朋友,解释了其中的区别 正如其他人所说,每个用例略有不同(尽管它们通常可以互换使用) 由于读卡器用于读取字符,因此在处理文本性质的输入(或以字符表示

今天我问了这个问题,我想我回答得很糟糕。我说过流是一种流动的数据,读卡器是一种技术,我们从中读取的是静态数据。我知道这是一个糟糕的答案,所以请用Java示例向我提供这两者之间的清晰区别和定义


谢谢。

流用于读取字节,读卡器用于读取字符。一个字符可能包含一个字节或多个字节,具体取决于字符集。

输入流是面向字节的。读者是以性格为导向的


javadocs是你的朋友,解释了其中的区别

正如其他人所说,每个用例略有不同(尽管它们通常可以互换使用)


由于读卡器用于读取字符,因此在处理文本性质的输入(或以字符表示的数据)时,读卡器会更好。我说得更好是因为读卡器(在典型使用的上下文中)本质上是流,具有易于读取字符输入的方法。

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


另一方面,
Reader/Writer
是基于字符的类。这些类一次从流中读取或写入一个字符。这些类扩展
java.io.Reader
(所有字符输入类)或
java.io.Writer
(所有字符输出类)。如果您处理文本文件或其他文本流,这些类非常有用。这些类也是
缓冲的
非缓冲的

+1这才是真正的重点,读卡器通常由某种类型的输入流支持(不总是-请参阅StringReader)并执行字节到16位unicode字符的转换。RTFM==读取F***操作手册从流中读取时,字节和字符之间的映射通过编码给出。对于UTF-8,一个字符可以在1到6字节之间。