IO流
作用 : 传输数据
分类
按流向分类
输入流
输出流
按传输的最小数据单位分类
字节流
最小单位 : byte
字符流
最小单位 : char
字符流能传的字节流一定能传
按功能分类
节点流 : 数据源到出口一条龙
包装流(过滤流) : 数据源不能直接到出口,中间有一段经过包装 (包装者模式)
例 :
水管,从水龙头出来,输入的冷水,出来的冷水,这就是节点流
从热水器出来,输入的冷水,输出的热水,这就是包装流
注意 : 所有的包装都使用了装饰者模式
字节流
体系
文件字节流
FileInputStream
输入流 : 文件到程序
FileOutputStream
输出流 : 程序到文件
FileOutputStream("文件地址",boolean是否为追加模式)
内存流 在读取数据过程中,因数据不全导致的乱码问题(汉字2-4个字节,字母1个,数字1个,获取时可能把数字部分拆开)
ByteArrayInputStream
ByteArrayOutputStream
特有方法 :
byte toByteArray() 将内存流中的数据获取出来
ByteArrayOutputStram
默认大小32字节,会扩容
缓冲流
提高读写效率
注意 : 包装流
BufferedInputStream
BufferedOutputStream
缓冲区默认大小为8KB
对象流
将对象写入文件中
注意 :
1.读写的对象所属的类要实现序列化接口
2.一个对象流只能读写一个对象
3.存储的所有数据都必须进行序列化
4.static修饰的属性不参与序列化(输出时为默认值)
5.transient修饰的属性也不参与序列化
ObjectInputStream
readObject() 读取对象,只读第一个
writeObject() 写入对象
存储的所有数据都必须参与序列化,包括属性里的,属性里有别的类的对象,若创建的对象没有值,其实没影响,如果有值,就会报错