IO流概述
流是有起点和终点的有序字节序列的集合。
流的分类:
输入流/输出流:以当前程序为参照,如果程序读取数据就是输入流,输出数据就是输出流。
字节流/字符流:如果是以字节为单位处理流中的数据就是字节流,以字节为单位处理流中的数据就是字符流。
节点流/处理流:如果直接从设备上读写数据就是节点流;处理流是对节点流的包装。
流的作用是读写设备上的数据,这儿的设备是广义的设备,可以是文件,可以是网络。
读写文件常用的IO流:
在java IO包中定义了相关的流类,以Stream为结尾的都是字节流,以Reader结尾的都是字符输入流,以Writer结尾的都是字符输出流。
1.FileInputStream/FileOutputStream
FileInputStream类用于以字节为单位读取文件中的数据。
FileOutputStream类用于以字节为单位输出文件到文件中
2.BufferedInputStream/BufferedOutputStream
字节缓存流是对其它字节流的包装。
3.DataInputStream/DataOutputStream
读写数据的时候可以带有数据格式
4.PrintStream
打印字节流
5.装饰者设计模式
设计模式,可以简单的理解为别人总结一套解决方案,这套解决方案被大多数人熟知与认可。
装饰者设计模式,对现有类的所有方法进行功能的扩展
在IO流中,所有Filter开头的流类都采用了装饰着设计模式。
6.ObjectInputStream/ObjectOutputStream
对象序列化:
ObjectInputStream把对象转换为01二进制序列
对象反序列化
ObjectOutputStream把01二进制序列转化为对象
注意:
对象的序列化/反序列化的前提是,对象的类需要实现Serializable接口
一般情况下,实现序列化Serializable接口类,需要手动添加SerialVersionUID字段。
7.InputStreamReader/OutputStreamWriter
当文件的编码与当前环境编码不兼容时,使用转换流
InputStreamReader 把字节流以指定的编码转换为字符流
OutputStreamWriter 把字符流以指定的字节编码转换为字节流
他采用了适配器设计模式
8.BufferedReader/BufferedWriter
字符缓冲流,对字符流进行缓冲,默认有8192的字符大小缓冲区。
9.File类
读写文件的内容使用IO流相关的类,对文件/文件夹进行操作使用File类。
10.IO+Properties
经常把一些系统属性保存到配置文件中
经常单独创建一个包,在该包中添加配置文件,配置文件扩展名是.properties
可以使用Properties读取配置文件
也可以使用ResourceBoundle读取配置文件