缓冲流
节点流共有四个,除了节点流就是处理流,缓冲流是处理流的一种
使用框架
完整实例
添加异常处理以及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自动换行