IO流
1)
字符流 : (只能操作纯文本)
Reader 用于读取字符流的抽象类。
文件字符输入流FileReader : 节点流 输入流 字符流
无新增功能,可以发生多态
Writer 用于写入字符流的抽象类。
文件字符输出流FileWriter : 节点流 输出流 字符流
无新增功能,可以发生多态
注意:
方法的调用: 执行方法中的代码
方式: 方法名(参数列表)
//1.构建流->与文件建立联系
Reader rd =new FileReader("D://test.txt");
Writer rt =new FileWriter("D://aaa.txt", true);
//2.读写
char[] car= new char[1024];
intlen = -1; //记录每次读入到数组中数据的个数
while((len=rd.read(car))!=-1){
rt.write(car,0,len);
}
//3.刷出
rt.flush();
//4.关闭
rt.close();
rd.close();
2)
缓冲流 : 加快读写效率
功能流(节点流)
字节缓冲流
字节输入缓冲流 BufferedInputStream
无新增方法,可以发生多态
字节输出缓冲流 BufferedOutputStream
无新增方法,可以发生多态
字符缓冲流
//1.流
InputStreamis = new BufferedInputStream(new FileInputStream("D://test.txt")) ;
OutputStream os = new BufferedOutputStream(newFileOutputStream("D://test2.txt"));
//2.读写
byte[] car= new byte[1024];
int len =-1;
while((len= is.read(car))!=-1){
os.write(car,0,len);
}
//3.刷出
//4.关闭
3)
字符缓冲流
字符输入缓冲流 BufferedReader
新增方法 : String readLine() 读一行文字。
字符输出缓冲流 BufferedWriter
新增方法 : void newLine() 写一个行分隔符。
//1.流
BufferedReader br = newBufferedReader(new FileReader("D://haha.txt"));
BufferedWriter bw = new BufferedWriter(newFileWriter("D://haha2.txt"));
//2.读写
String msg= null; //存储每次读入的每行内容
while((msg= br.readLine())!=null){
bw.write(msg);
bw.newLine(); //换行
System.out.println("----->"+msg);
}
//3.刷出
//4.关闭
4)
Data流 | 基本数据类型流 : 传输数据+保留数据类型(基本数据类型+String)
功能流-->字节流的功能流
Data输入流 : DataInputStream
新增方法: readXxx()
Data输出流: DataOutputStream
新增方法: writeXxx(Xxx args)
注意:
读入的顺序与写出的顺序要求保持一致
读入的是写出的源文件
5)
Object流 | 对象流 | 引用数据类型流 : 数据+类型(基本|引用) *****
字节流的功能流
当读写,传输对象数据,可以选择Object流,能够读写数据的同时保留数据的类型
序列化输出流 : ObjectOutputStream
新增方法: writeXxx(Xxx args)
void writeObject(Object obj)将指定的对象写入ObjectOutputStream。
反序列化输入流 : ObjectInputStream
新增方法: Xxx readXxx()
Object readObject()从ObjectInputStream中读取一个对象。
序列化: 将对象转化为可存储或者可传输的状态的过程
反序列化
注意:
引用数据类型数据为对象数据
先序列化后反序列化
不是所有的类型的对象都能序列化 实现Serializable接口
反序列化与序列化顺序一致
transient修饰的数据不会序列化
static属性不会序列化
如果父类实现序列化接口,子类没有实现序列化接口,可以序列化所有内容
如果子类实现序列化接口,但是父类没有实现,只能序列化子类的属性
序列号 : 实现了序列化接口的类型会默认存在序列号serialVersionUID
当类中的成员改变 ,序列号会默认更新
作用: 检查前后版本是否统一
解决版本不一致问题:
手动设置序列号
通过快捷键生成序列号:
1.类需要实现序列化接口
2.setting中设置(按照截图,不用背)
3.选中类名,alt+enter生成序列号