IO流
1.概念与三要素
本质是一套用于数据传输的机制
根据传输的方向(参照物—内存)
输入流:往内存来传输数据
输出流:从内存往外传输数据
根据传输的方式
字符流—传输字符形式数据
字节流—传输字节形式数据
四大基本流(四个类都是抽象类)
输出流
字符流字符输出流( Writer ) 字节流字节输出流( OutputStream )
输入流
字符输入流( Reader ) 字节输入流( InputStream )
根据数据存放/获取的位置
硬盘、内存、网络、外设设备
2.硬盘
字符流
给硬盘上.txt文件写入数据文件字符输出流 -FileWriter
从硬盘上.txt文件读取数据文件字符输入流–FileReader
字节流(常见)
给硬盘上.txt文件写入数据文件字节输出流-FileOutputStream
从硬盘上.txt文件读取数据文件字节输入流–FileInputStream
3.缓冲流(给别的流提供缓冲区)
BufferedReader—给字符输入流提供缓冲区
readLine()读取一行
BufferedWriter- -提供更大的缓冲区
newLine()换行
4.转换流
OutputStreamWriter—字符流转成字节流
InputStreamReadrer–字节流转成字符流
5.系统流
out、err、in (都是字节流)
系统流都是静态的流对象,使用完毕之后不能关流
6.打印流
print方法以及printIn方法都是定义在打印流里
7.序列化与反序列化
序列化:把对象以及相关信息转成字节数组存储到硬盘 上(持久化)
反序列化:把字节数组转成对应的对象
注意:
★1.类实现Serializable产生的对象才能做序列化
★2.如果属性被static/transient来修饰不能被序列化过去
★3.serialVersionUID (序列化版本号)
在序列化之前会根据类里属性和方法来计算出一个版本号, 随着对象一起序列化过去。在反序列化之前会再次根据类里属性和方法来计算出一个版本号,根据前后两个版本号进行对比,如果对比结果一致可以进行正常的反序列化如果对于结果不一致则反序列化失败。( 指定版本:–private static final long serialVersionUID )
4.集合对象和映射对象都不能直接进行序列化,只能依次遍历元素对象一一进行序列化
8.I0流中异常捕获
1.在try块外声明流对象赋值为null ,在try块里进行真正的初始化
2.保证流对象初始化成功之后才能进行关流
3.无论关流成功与否,流对象都要置为null让系统进行回收
4.如果关流操作失败发生在自动冲刷之前那么需要添加冲刷过程,保证数据不会滞留在缓冲区