Java基础——字节流和字符流

字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。

为什么要有字符流?

Java中字符是采用Unicode标准,Unicode 编码中,一个英文字母或一个中文汉字为两个字节。

而在UTF-8编码中,一个中文字符是3个字节。

那么问题来了,如果使用字节流处理中文,如果一次读写一个字符对应的字节数就不会有问题,一旦将一个字符对应的字节分裂开来,就会出现乱码了。为了更方便地处理中文这些字符,Java就推出了字符流。

字节流

字节流在Java中是以字节为基本单位进行数据的读写操作。它们是最基本的输入输出流,所有字节流的超类是`InputStream`和`OutputStream`。字节流可以处理任何类型的文件,包括文本文件和二进制文件,如图片、音频和视频。由于它们直接操作字节,所以不会涉及到字符编码的问题。字节流不自带缓冲机制,因此每次读写都是直接与文件系统交互,这在处理大量数据时可能会导致效率较低。在Java中,常见的字节流类包括`FileInputStream`、`FileOutputStream`、`BufferedInputStream`和`BufferedOutputStream`。

字符流

字符流在Java中是以字符为基本单位进行数据的读写操作。字符流的超类是`Reader`和`Writer`,它们专门用于处理文本数据。字符流在读写过程中会涉及到字符编码和解码,因此可以避免因编码不一致导致的乱码问题。字符流自带缓冲机制,通过内部的缓冲区可以提高读写效率,特别是在频繁进行读写操作时。字符流适合处理文本文件,因为它们可以保证字符的正确性和完整性。在Java中,常见的字符流类包括`FileReader`、`FileWriter`、`BufferedReader`和`BufferedWriter`。此外,还有转换流`InputStreamReader`和`OutputStreamWriter`,它们可以将字节流转换为字符流,或反之,同时进行必要的编码转换。

总结

字节流一般用来处理图像、视频、音频、PPT、Word等类型的文件。字符流一般用于处理纯文本类型的文件,如TXT文件等,但不能处理图像视频等非文本文件。用一句话说就是:字节流可以处理一切文件,而字符流只能处理纯文本文件。
字节流本身没有缓冲区,缓冲字节流相对于字节流,效率提升非常高。而字符流本身就带有缓冲区,缓冲字符流相对于字符流效率提升就不是那么大了。

字节流在操作的时候本身是不会用到缓冲区的,是与文件本身直接操作的,所以字节流在操作文件时,即使不关闭资源,文件也能输出;字符流在操作的时候是使用到缓冲区的。如果字符流不调用close或flush方法,则不会输出任何内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值