Java | FileWriter和BufferedWriter的真正区别在哪

网上关于两者区别的内容挺多的,但很多表述都及其不准确,很容易被误导。不过好在也有些厉害的博主做了很细致的分析,这里我总结了一下,加上自己的思考。

  • FileWriter和BufferWriter写入的都是字符流
  • FileWriter和BufferWriter都有缓冲区,FileWriter的缓冲区大小是8192个字节,BufferWriter缓冲区大小是8192个字符(说两者的区别在于BufferWriter有缓冲区而FileWriter没有缓冲区的是在放屁!)
  • FileWriter和BufferWriter调用write方法时都没有真正往硬盘里写数据,存入的都是缓冲区,只有调用flush或者close时才会刷新缓冲区并写入硬盘
  • FileWriter每次调用write()方法,就会调用一次OutputStreamWriter中的write()方法,而BufferedWriter只有在缓冲区满了才会调用OutputStreamWriter中的write()方法。仔细看OutputStreamWriter方法介绍,它是用于给字符转码的,并且会在缓冲区累积。这两句话是重点了,FileWriter每调用一次write就会进行一次转码,而BufferedWriter只有在缓冲区满了才会转码,这才是BufferedWriter高效的真正原因;在缓冲区累积则代表他们并不是write一次就输出,而是flush或者close才进行写入硬盘(有些人说FileWriter每执行一次write就进行一次写操作,而BufferWriter缓冲区满了才执行写操作也是在放屁!)

在这里插入图片描述

有两篇很好很详细的博客可以看一看
FileWriter与BufferedWriter的适用场景 - 笑尽云荒 - 博客园
BufferedWriter和FileWriter的区别 - 简书

猜你喜欢

转载自blog.csdn.net/weixin_48419914/article/details/121469792