一、 IO流概念
简单的说,就是将数据的传输操作(数据的输入输出),看做一种数据的流动。Java中的IO操作主要指的是java.io包下的一些常用类的使用,通过这些常用类对数据进行读取(输入Input)和写出(输出Output)。
二、 IO流的分类
按照流的方向可以分为输入流和输出流;按照流动的数据类型来分,可分为字节流和字符流。字节流分为输入流(顶级父类InputStream)和输出流(顶级父类OutStream),字符流分为输入流(顶级父类Reader)和输出流(顶级父类Writer)。
三、字节流和字符流的区别
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
(一)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
(二)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
(三)字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的;而字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件的。
四、字节流
(一)、输出字节流OutputStream
它是一个抽象类,是所有输出字节流的类的超类。其常用直接子类有:
1)、ByteArrayOutputStream、FileOutputStream是分别向Byte 数组、和本地文件中写入数据。
2)、PipedOutputStream 是向与其它线程共用的管道中写入数据。
3)、ObjectOutputStream 和所有FilterOutputStream的子类都是转换流(装饰流)。
OutputStream方法有:
1)、关闭次输出流并释放与此流关联的所有系统资源。
void close()
2)、刷新管道中的字节并强制输出。
void flush()
3)、将指定的4字节的int数据的低8bit写入此输出流。
void write(int b)
4)、将字节数组中的从off开始长度为len的字节写入此输出流 .
void write(byte[] b, int off, int len)
5)、将b.length长度的字节数组写入此输出流.
void write(byte[] b)
(二)、输入字节流 inputStream