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

本文详细分析了FileWriter和BufferedWriter的区别,澄清了关于缓冲区大小和写入机制的误解。BufferedWriter的高效源于其缓冲区策略,只有在缓冲区满或调用flush/close时才进行字符转码和硬盘写入,而FileWriter每次write都会进行转码。理解这些原理有助于选择合适的字符流输出方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  • 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的区别 - 简书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值