BufferWriter要注意的flush

直接通过例子上手
例:使用BufferedReader读取1.txt文件中数据,使用BufferedWriter将数据写入到2.txt中?
BufferWriter 中的flush函数
BufferWriter 中的flush函数

  1. 从上面图中,我们通过buffered流开始读入数据
    BufferWriter 中的flush函数BufferWriter 中的flush函数
  2. 大家可以看到我的BufferedWriter和BufferedReader已经工作完,此时我们检查1.txt文件内容是否已经写入到2.txt
    BufferWriter 中的flush函数
    可以看到2.txt中没有任何内容,说明我们读入出现错误!但代码又没有报错,究竟是哪里出了问题呢?
  3. 此时我在java代码中,在bw.newLine();下添加一行代码bw.flush();
    BufferWriter 中的flush函数
  4. *然后我们在运行下程序,并检查2.txt中的数据
    BufferWriter 中的flush函数
    大家可以看到此时我们的数据成功读入。究竟为什么没写flush()这个方法,数据无法正常读入到我们指定的文件夹中去。原因如下

原因

  • buffered流出现的原因

    问题1:现在每个人的家里都在使用自来水,自水来的来源于自来水厂。此时家里相当于应用程序接了一个水管进入我们的自来水厂(文件缓冲区).
    假设此时自来水厂的管道崩掉了,需要抢修几个小时,此时每个人的家里无法得到自来水资源(相当于我们计算机在传输数据时,数据总线也会出现阻塞现象),我们只能等待!
    问题2:每得到一段数据,我们需要关闭水龙头,等待数据处理完后,继续打开水龙头,等待下一段数据处理,这样效率会降低。
    针对这上面的情况,我们会在家里建立一个蓄水池,及时管道崩掉,我们可以使用蓄水池的水源
    —-蓄水池就是我们使用的缓冲流

  • readLine() 指针是否指向换行符,如果不是,往下走,一直找到换行符后,将之前读的数据读取出来。但换行符并没有读取出来,忽略了换行符。
  • writer(String str) 将str写入到BufferedWriter中,注意:如果BufferedWriter没有关流,磁盘和文件缓冲区都不会有数据读入进来,因为writer是将数据写入到BufferedWriter中。

  • newLine() 是将writer()写入的数据换行。因为\r\n是window系统记事本以外特有的换行符,但除了window外,会多耗一个空间。

  • flush() 如果我们不关闭BufferedWriter,但我们还想数据能写入到文件缓冲区中,可以使用该方法. 该方法是刷新缓冲区,往文件缓冲区进行刷新,同时文件缓冲区会连带刷新,文件缓冲区往磁盘上进行刷新。
    注:使用flush()每写入一行数据,需要刷新一下,但同时也可以如下图BufferWriter 中的flush函数
    将所有数据全部写入bufferedWriter中后在一次性刷新。
    优缺点:
    一次性刷:性能快,数据可能会丢失 如果数据没有全部写入进去后,突然断电,前面的数据会全部丢失,但一行数据刷,就不会出现丢失数据多。只会丢失后面没有读入的数据。
    一行数据刷:性能快,数据丢失少,会保证我的数据能及时到达目的地

相关文章:

  • 2021-09-25
  • 2021-08-07
  • 2022-01-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-06
  • 2022-12-23
  • 2021-12-29
  • 2021-04-04
  • 2021-05-25
  • 2021-08-08
  • 2021-12-27
相关资源
相似解决方案