你的这个问题我也不敢确定,只是冒昧猜测了一下,还待证实,如有不对请见谅:
BufferedWriter是继承Writer的,Java API里是说Write()和append()一样,请看API:
public Writer append (CharSequence csq)
Appends the character sequence csq to the target. This method works the same way as Writer.write(csq.toString()). If csq is null, then the string "null" is written to the target stream.
根据经验我们一般在使用在使用字符串缓冲类StringBuffer和StringBuilder时才会用到append方法,所以我估计他们之间多少会有些关联,
可能当new BufferedWriter()时产生的效果和new StringBuffer()差不多,既然API介绍说BufferedWriter的write方法和append方法一样,我猜想调用write方法时,虚拟机会直接将新的字符串追
加到内存的字符串池中以前的字符串后面,就和StringBuffer的append原理一样,write仅仅只改变了内存中的字符串,并没有真正的写入硬件设备上,
由于StringBuffer字符串缓冲区的容量是自动增长的,BufferedWriter的缓冲区也会自动增长。
所以这就是如果不使用flush方法或close方法,缓冲区里的数据就一直留在内存中。
以上仅仅是猜测,未经证实,网上查了很多次,很难找到BufferedWriter类中的write的解释,如有不足,请斧正!
作者: 张小锋 时间: 2012-5-9 02:39
在补上一点:
BufferedWriter使用的的是字符串缓冲,缓冲区容量可能也是自动增张的,使用Write方法会一直不断的向缓冲区里追加新字符串,因为其容量永远满不了,
不像使用数组作为缓冲那样有固定容量,超过容量限制后,write方法会自动将缓冲区里的数据写入到硬件设备上,而BufferedWriter没有这个功能。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |