字符流和字节流有什么区别?

6

首先,我知道字符和字节之间的区别。字符是某些内容的标志或注释("A","中"或其他),而字节是计算机中的具体大小。计算机中字符的大小取决于编码方式。

但是什么是字符流和字节流呢?它们分别代表什么具体类型?字节流是一串字节吗?如果是这样,那字符流又是什么?我的最后一个问题是,TCP传输使用哪种类型的流?


可能是字节流和字符流的重复问题。 - skaffman
5个回答

14

字符流是比字节流更高级的概念。实际上,字符流是一个被逻辑包装的字节流,它可以输出特定编码的字符,而不必读取字节并解码它们所代表的字符。


4
一个 InputStream 读取字节,而一个 Reader 读取字符。

通过 TCP 传输的所有内容都是以字节形式呈现的。如果你知道字节流表示的是字符,你可以使用 InputStreamReader 将 InputStream 作为 Reader 使用。


Java中有多少读取器?在我的Java项目中,我遇到了两个读取器:BufferedReader和InputStreamReader,它们代表什么意思? - Fat Cat
点击“Reader”链接,查看“Direct Known Subclasses”以获取读取器列表。至少有这么多个,但任何人都可以使用新的实现扩展Reader,因此实际数量是不受限制的。从那里单击每个链接将带您到其Javadoc,该文档将为您提供比任何人都能提供的更好的描述。 - ziesemer
简单来说,InputStreamReader被用作从InputStream到Reader的适配器,通过将字节转换为字符。BufferedReader是BufferedInputStream的字符等效物,并输出其读取的内容 - 但具有内部缓冲以提高性能,在每个单独的读取调用底层流时都会带来性能损失的情况下。 - ziesemer
我似乎理解了读者的意思,读者只是一个用于以编码相关的方式读取或写入字节流的结构体,Java提供了各种扩展读者,让程序员轻松进行转换,任何用户都可以扩展Reader类来实现自己的转换,我说得对吗? - Fat Cat
也许有点模糊/有限,但我不会说你刚才说的任何话是不正确的。 我强烈建议您查看aneal答案中提供的相同链接:http://docs.oracle.com/javase/tutorial/i18n/text/stream.html - ziesemer
非常感谢您耐心的解释。 - Fat Cat

0
Java中的字符流类用于处理字符的输入和输出,例如处理Unicode,而字节流类用于处理字节的输入和输出,即仅限ASCII码。前者在Java 1.0版本中使用,而后者在Java 1.1中使用。

0

TCP传输的是字节。这些字节代表什么取决于协议。

您可以在此处阅读有关字符流和字节流之间关系的信息:http://docs.oracle.com/javase/tutorial/i18n/text/stream.html

实际上,字符流是字节流的应用程序抽象,允许使用各种编码将字节读入或写出字符。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接