流的概念和作用
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
字符流和字节流
字符流的由来
因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查指定的码表。
字节流和字符流的区别
- 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
- 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
- 是否使用缓冲区:字符流使用了缓冲区(buffer),而字节流没有使用缓冲区
在字节流中输出数据主要是使用OutputStream完成,输入使用InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成(这四个都是抽象类)。
Java内用Unicode编码存储字符,字符流实际是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成。基于这个特点,处理文本数据一般使用字符流,处理二进制数据(如图片、视频、音频)一般用字节流。