缓冲流

缓冲区概述

缓冲流也称为高效流,或者高级流,之前学习的字节流可以称为原始流
作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能
image.png
我认为原始流的传输速率受限是因为内存传输数据的速度是很快的,而磁盘传输数据的速率是很慢的,那么在内存和磁盘的数据交换中,数据的传输效率就会受限于磁盘的数据传输速率,而缓冲流建立了一个二者之间的缓冲区,当内存和磁盘发生数据交换时,磁盘和内存不需要考虑对方是否能来的及够接受这些数据,统统将数据放在缓冲区中,由缓冲区来完成剩余的事情

缓冲流类

image.png
image.png

缓冲流构建

image.png
使用高级流只需要将原始流包装成缓存流就可以了

  1. public static void main(String[] args) {
  2. try {
  3. //创建字节输入流管道与原视频接通
  4. InputStream inn=new FileInputStream("C:\\Users\\86191\\Desktop\\jar\\阿萨德加快.txt");
  5. //创建字节输出流管道与目标文件接通
  6. InputStream in=new BufferedInputStream(inn);//包装成高级流
  7. OutputStream outt=new FileOutputStream("C:\\Users\\86191\\Desktop\\jar\\阿萨德sda加快.txt",true);
  8. OutputStream out=new BufferedOutputStream(outt);//包装成高级流
  9. byte[] buffer=new byte[2];
  10. int len;//记录每次读取的字节数,这是因为最后一次数据可能无法填充满数组,不记录的话复制不正确
  11. while((len=in.read(buffer))!=-1){
  12. out.write(buffer,0,len);
  13. }
  14. System.out.println("复制完成");
  15. in.close();
  16. out.close();
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. }

字符缓冲输入流

image.png
image.png
字符缓冲流是按行读取,会自动识别空行只会在真正结束处返回null,注意这个方法是字符缓冲流独有的功能,所以不能用多态的形式,定义格式应该是:
BufferedReader br=new BufferedReader();
一般读中文用这种方法

字符缓存输出流

image.png
newline()方法和/r/n是一样的

image.png

实际开发时应该用哪个

image.png

转换流

为什么要用转换流

image.png
image.png

字符输入转换流(转换流是低级流需要包装成缓冲流)

输入

image.png
image.png
image.png 这里输入的是字节流不是字符流

输出

image.png

序列化对象

对象序列化

对象想要序列化那类必须实现Serializable接口

对象序列化

对象序列化就是以内存为基准,把内存中的对象存储到磁盘中
对象字节输出流:ObjectOutputStream
image.png
image.png
image.png
image.png
image.png

对象反序列化

transient修饰的成员变量不参与序列化
对象序列化可以加版本号,序列化版本号和反序列化的版本号必须一致才不会出错
private static final long serialVersionUID=1;
image.png
image.png

打印流(它自动包装了缓冲流)

如果他想追加数据需要在低级流中定义追加
image.png
image.png
image.png
image.png
image.png
image.png

输出语句重定向

image.png