I/O的类结构图
I/O的分类
根据处理的数据类型分为:字节流和字符流。
根据数据流向分为:输入流和输出流。
流又可分为节点流和处理流。
节点流
直接与数据源相连
处理流
与节点流一起使用,在节点流的基础上,再嵌套一层。提高文件的读取效率。
输入流
InputStream
作用是以字节的形式读取数据源产生的数据。
Reader
作用是以字符的形式读取数据源产生的数据。
输出流
OutputStream
作用是以字节的形式在接收端写数据。
Writer
作用是以字符的形式在接收端写数据。
常用的流
缓冲流
作用:缓冲流提供缓冲区,先把数据写入缓冲区,当缓冲区写满之后,再把缓冲区的内容写到文件中去。这样会提高读取效率。
对象流
作用:用于写入/读取对象的信息,使对象持久化。
使用的注意事项:
1.如果想将一个对象写入到磁盘中,那么对象所属的类必须要进行序列化,实现Serializable 接口,Serializable接口没有任何方法 ,是一个标记接口
2.如果对象所属的类的成员变量发生改变,你在读取原来的对象是就会报错,如果想要解决报错,保证serialVersionUID是唯一。
3.如果你不想将某些信息存入到磁盘 就可以同过transient关键字修饰成员变量
4.如果一个类中引用了另外的一个类,那么另外的这个类也要实现Serializable接口。
管道流
作用:可以进行两个线程之间的通信。一个线程作为管道输出流,另一个作为管道输入流。
转换流
作用:用于字节流和字符流的转化。
InputStreamReader:将字节流转换为字符流
OutputStreamWriter:将字符流转换为字节流