Java中的字符流和字节流以及C语言中的Char和Byte之间有什么区别?

4
在Java中,人们说InputStream按字节读取文件,然后使用BufferedReader将其更改为字符流。但在C语言中,char代表字节(8位)。那么我们在Java中所称的字符和字节是什么?

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

8
在Java中,byte是有符号的8位值,而char是无符号的16位值。 Character既是char的包装类型,也是一个实用类,支持许多有用的方法来支持charInputStreamReader之间的关键区别在于它读取二进制数据,每次读取一个字节。 Reader用于读取文本,并使用您设置的字符编码或默认编码将字节解码为char,例如UTF-8可以将1个、2个或3个字节转换为单个char
我建议你学习更多关于Java的基础知识。这将为你回答这些问题节省很多时间。

谢谢,正如你所说,我需要更加专注于基础知识。 - priwiljay

0
对于 C/C++ 部分,在这些语言中,char 至少保证是 8 位,因此 char 至少和 byte 一样宽。我从 1990 年开始编写 C,从 1992 年开始编写 C++,我从未见过真正的平台/编译器组合,其中 char 和 byte 不等价。
另外请注意,其他整数类型默认为有符号(例如 'int' 是有符号整数),但 'char' 等同于 'unsigned char'。

0

流是一种按顺序访问文件的方式。在流中,您可以逐个处理数据,因为它们不支持批量操作。但是,流支持各种来源和目标,包括磁盘文件、数组、其他设备、其他程序等。在Java中,字节与字符不是同一件事。因此,字节流与字符流是不同的。因此,Java定义了两种类型的流:字节流和字符流。

字节流

字节流逐字节访问文件。Java程序使用字节流执行8位字节的输入和输出。它适用于任何类型的文件,但不太适合文本文件。例如,如果文件使用Unicode编码,并且一个字符由两个字节表示,则字节流将单独处理这些字节,您需要自己进行转换。面向字节的流不使用任何编码方案,而面向字符的流使用字符编码方案(UNICODE)。所有字节流类都是从InputStream和OutputStream派生的。


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