流,其实是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。按照不同的划分标准,可以分为字符流和字节流、输入流和输出流。
由于因为数据编码的不同,而有了对字符进行高效操作的流对象,这就是字符流。字符流本质其实就是基于字节流读取时,去查了指定的码表。字节流和字符流的区别:
1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节;
2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据;
3)字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的;而字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件。
设备上的数据无论是图片或者视频,文字,它们都以二进制存储的,所以字节流可以处理设备上的所有,在开发中字节流使用广泛。
Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中。其中,所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类;而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类。
InputStream类是字节输入流的抽象类,Reader类是字符输入流的抽象类,OutputStream类是字节输入流的抽象类,Writer类是字符输出流的抽象类,File类是IO包中唯一代表磁盘文件本身的对象。对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。
io