3.字节流实现文件拷贝 :
数据源---文件字节输入流--->程序---文件字节输出流---->目的地
步骤 :
1.建立联系(数据源,目的地)
2.构建流(文件字节输入流 文件字节输出流)
3.读入写出
4.刷出
5.关闭
4.字符流实现文件拷贝 : 只能拷贝纯文本文件
字符输入流 : Reader
文件字符输入流 FileReader
字符输出流 : Writer
文件字符输出流 FileWriter
5.功能流 : 加强节点流的功能,提高节点流的性能
必须包裹节点流进行使用
缓冲流 : 加快读写效率 Buffered
字节缓冲流: 提高字节流节点流读写效率
字节输入缓冲流BufferedInputStream : 缓冲字节输入节点流
字节输出缓冲流BufferedOutputStream : 缓冲字节输出节点流
以上两个类型没有新增方法,可以发生多态
字符缓冲流 : 提高字符流节点流读写效率
字符输入缓冲流BufferedReader : 缓冲字符输入节点流
新增方法 : String readLine() 读取一行文本。
字符输出缓冲流BufferedWriter : 缓冲字符输出节点流
新增方法 : void newLine() 写入行分隔符。
Data流 : 数据流 | 基本数据类型流
能够让节点流在读写数据的同时读写其数据类型(基本数据类型|String)
是字节流的功能流
DataInputStream : 修饰字节输入节点流
新增方法 : xxx readXxx() 读取对应类型的数据返回
DataOutputStream : 修饰字节输出节点流
新增方法 : void writeXxx(xxx) 写出XXX类型的数据
注意 : 读入与写出的顺序需要保持一致
java.io.EOFException 当通过数据输入流读取时候,类型不匹配,或者不是读入源文件都有能遇到的异常
对象流 : Object
读写对象数据
字节流的功能流
序列化 :
将对象转为可存储或者可传输的状态的过程
序列化输出流 : ObjectOutputStream
新增方法 : final void writeObject(Object obj) 将指定对象写入 ObjectOutputStream。
反序列化输入流 : ObjectInputStream
新增方法 : final Object readObject() 从 ObjectInputStream 中读取一个对象。
注意 :
需要先序列化后反序列化
不是所有类型的对象都能序列化 java.io.Serializable
不是所有的属性都需要序列化 transient
静态属性不会被序列化
如果父类实现了序列化接口,子类没有实现,子类可以序列化所有的内容
如果父类没有实现序列化接口,子类实现了,子类只能序列化子类独有的内容
序列号 : 在实现了序列化的类型中必会存在一个序列号,如果显示提供了以自定义的为主,如果没有显示提供,会存在默认的序列号
作用 : 可以实现检测前后版本一致问题
因为当类中的成员存在变动,如果是显示自定义的序列号没有影响,但是如果使用的是默认提供的序列号,会自动更新
实现前后版本兼容问题 :
手动提供序列号
可以通过idea快捷键自动生成序列号 :
1.类实现序列化接口
2.settings设置
3.选中类名->alt+enter->生成序列化字段
File src = new File("D://AAA/test2.txt");
File dest = new File("D://AAA/test4.txt");
//2.构建流(文件字符输入流 文件字符输出流)
FileReader rd = new FileReader(src);
FileWriter rt = new FileWriter(dest);
//3.读写
char[] car = new char[1024];
int len = -1;
while((len=rd.read(car))!=-1){
rt.write(car,0,len);
}
//4.刷出
rt.flush();
//5.关闭
rt.close();
rd.close();