3.5 Java之缓冲流

缓冲流

节点流共有四个,除了节点流就是处理流,缓冲流是处理流的一种

使用框架

这里写图片描述
这里写图片描述

完整实例

添加异常处理以及flush方法
这里写图片描述
这里写图片描述
这里写图片描述

  • 第2,3图片未衔接(两个异常放在一个catch块里处理了)
  • 第三步莫名跑上边去了(。。。)
  • 字节流也能处理文本文件,要求byte数组为偶数(即汉字两个字节不拆分),但效率不如字符流
  • 创建流的过程分两步,先创建节点流,然后创建缓冲流,相当于节点流包装在缓冲流的构造器中(又是一层构造器的包装)
  • 关闭处理流,则对应字节流也关闭,所以关闭时只处理处理流(I和O)的关闭,先关输出流
  • 调用完write方法后,要调用flush方法(图中未加),刷新清空下(缓冲区)

注意点


  • 缓冲流加快数据传递原因

    • 缓冲流底层也是用数组实现
    • 关注read方法,节点流的该方法是阻塞式,若未显式通知,则一直wait
      而缓冲流则是非阻塞式

  • 调用flush方法的必要性
    • 在写最后一次之前,这些操作每次再写的时候,实际上都没问题
    • 最后一次可能存不满 要求最后剩下的那点也刷新一下,写出去

封装与方法测试

这里写图片描述

  • 大大提高操作效率
  • 一般不使用节点流,改用升级的缓冲流

BufferReader实例

这里写图片描述
这里写图片描述

  • 新瓶装旧酒

ReadLine方法

BufferReader不仅可读取char型数组,也可readline
这里写图片描述
这里写图片描述
这里写图片描述

  • 写入文件的方法存在问题,未添加换行语句,各行间直接连接

修改写入文件的方法

这里写图片描述

  • 若读到文件末尾,则返回null给当前字符串,而不是以往的-1赋值给len(记录读取到的长度)
  • 注意添加换行,否则每行间直接连接,没有另起一行
  • 换行两种方式,二选一(\n和newLine),不是printIn(那是控制台换行)

缓冲流总结

这里写图片描述

  • 缓冲流:加速节点流对文件操作的速度,即加快了文件的操作效率
  • 左边节点流对应右边缓冲流(升级)
  • 节点流对象作为形参传入缓冲流的构造器(节点流包装到缓冲流的构造器)
  • flush方法一定要应用在缓冲输出流中,包括字节流和字符流
  • 缓冲输入字符流(处理字符串)不仅可读取char型数组,也可readline,避免向数组一个个写的麻烦,每次可以直接读一行,也提高了效率

特殊实例(复制Word文档)

  • 采用字节流操作,即使文件全是字符,但可插入图片
  • Word文件即使全是文本,全是字符,但由于经过包装(内部代码操作),采用字符流仍有问题
  • Word文件进行封装过,不能看作纯文本文件
  • TXT文件不换行,一直一行,Word自动换行

猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/81583620
3.5