缓冲流
缓冲区概述
缓冲流也称为高效流,或者高级流,之前学习的字节流可以称为原始流
作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能
我认为原始流的传输速率受限是因为内存传输数据的速度是很快的,而磁盘传输数据的速率是很慢的,那么在内存和磁盘的数据交换中,数据的传输效率就会受限于磁盘的数据传输速率,而缓冲流建立了一个二者之间的缓冲区,当内存和磁盘发生数据交换时,磁盘和内存不需要考虑对方是否能来的及够接受这些数据,统统将数据放在缓冲区中,由缓冲区来完成剩余的事情
缓冲流类
缓冲流构建
使用高级流只需要将原始流包装成缓存流就可以了
public static void main(String[] args) {
try {
//创建字节输入流管道与原视频接通
InputStream inn=new FileInputStream("C:\\Users\\86191\\Desktop\\jar\\阿萨德加快.txt");
//创建字节输出流管道与目标文件接通
InputStream in=new BufferedInputStream(inn);//包装成高级流
OutputStream outt=new FileOutputStream("C:\\Users\\86191\\Desktop\\jar\\阿萨德sda加快.txt",true);
OutputStream out=new BufferedOutputStream(outt);//包装成高级流
byte[] buffer=new byte[2];
int len;//记录每次读取的字节数,这是因为最后一次数据可能无法填充满数组,不记录的话复制不正确
while((len=in.read(buffer))!=-1){
out.write(buffer,0,len);
}
System.out.println("复制完成");
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
字符缓冲输入流
字符缓冲流是按行读取,会自动识别空行只会在真正结束处返回null,注意这个方法是字符缓冲流独有的功能,所以不能用多态的形式,定义格式应该是:
BufferedReader br=new BufferedReader();
一般读中文用这种方法
字符缓存输出流
实际开发时应该用哪个
转换流
为什么要用转换流
字符输入转换流(转换流是低级流需要包装成缓冲流)
输入
输出
序列化对象
对象序列化
对象序列化
对象序列化就是以内存为基准,把内存中的对象存储到磁盘中
对象字节输出流:ObjectOutputStream
对象反序列化
transient修饰的成员变量不参与序列化
对象序列化可以加版本号,序列化版本号和反序列化的版本号必须一致才不会出错
private static final long serialVersionUID=1;