在Java中,人们说InputStream按字节读取文件,然后使用BufferedReader将其更改为字符流。但在C语言中,char代表字节(8位)。那么我们在Java中所称的字符和字节是什么?
byte
是有符号的8位值,而char
是无符号的16位值。 Character
既是char
的包装类型,也是一个实用类,支持许多有用的方法来支持char
。
InputStream
和Reader
之间的关键区别在于它读取二进制数据,每次读取一个字节。 Reader
用于读取文本,并使用您设置的字符编码或默认编码将字节解码为char
,例如UTF-8
可以将1个、2个或3个字节转换为单个char
。流是一种按顺序访问文件的方式。在流中,您可以逐个处理数据,因为它们不支持批量操作。但是,流支持各种来源和目标,包括磁盘文件、数组、其他设备、其他程序等。在Java中,字节与字符不是同一件事。因此,字节流与字符流是不同的。因此,Java定义了两种类型的流:字节流和字符流。
字节流
字节流逐字节访问文件。Java程序使用字节流执行8位字节的输入和输出。它适用于任何类型的文件,但不太适合文本文件。例如,如果文件使用Unicode编码,并且一个字符由两个字节表示,则字节流将单独处理这些字节,您需要自己进行转换。面向字节的流不使用任何编码方案,而面向字符的流使用字符编码方案(UNICODE)。所有字节流类都是从InputStream和OutputStream派生的。