java io
原文地址:https://www.cnblogs.com/coderzjz/p/13670088.html
I/O 框架
1.0流的概念
内存与存储设备之间传输数据的通道
2.0流的分类
2.1按方向
- 输入流:将<存储设备>中的内容读到<内存>中
- 输出流:将<内存>中的内容写到<存储设备>中
2.2按单位
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
2.3按功能
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础之上增强功能
3.0字节流
字节流的父类(抽象类)
3.1文件字节流
文件输入流FileInputStream
文件输出流FileOutputStream
3.2图片复制案例
3.3字节缓冲流
缓冲流:BufferedInputStream/ BufferedOutputStream
- 提高IO效率,减少访问磁盘次数
- 数据存储在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close
4.0对象流
ObjectOutputStream / ObjectInputStream
- 增强了缓冲区功能
- 增强了读写8种基本数据类型和字符串的功能
- 增强了读写对象的功能
readObject()
从流中读取一个对象writeObject(Object obj)
向流中写入一个对象
使用流传输对象的过程称为序列化、反序列化
5.0序列化与反序列化
5.1序列化
5.2反序列化
5.3注意事项
- 某个类要想序列化必须实现Serializable接口
- 序列化类中对象属性要求实现Serializable接口
- 序列化版本号ID,保证序列化的类和反序列化的类是同一个类
- 使用transient修饰属性,这个属性就不能序列化
- 静态属性不能序列化
- 序列化多个对象,可以借助集合来实现
6.0编码方式
UTF-8... 不赘述
7.0字符流
reader
字符输入流
public int read(){}
public int read(char[] c){}
public int read(char[] b, int off, int len){}
Writer
字符输出流
public void write(int n){}
public void write(String str){}
public void write(char[] c){}
7.2(案例)使用上述内容进行文本文件复制
不能复制图片或二进制文件,使用字节流可以复制任意文件
7.3字符缓冲流
BufferedReader / BufferedWriter
高效读写、支持输入换行符、可一次写一行读一行
7.4PrintWriter
封装了print() / println()
方法 支持写入后换行
支持数据原样打印
7.5转换流
桥转换流 InputStreamReader / OutputStreamWriter
可将字节流转换为字符流
可设置字符的编码方式
8.0File类
概念:代表物理盘符中的一个文件或者文件夹