2 jacobvv jacobvv 于 2014.11.21 00:12 提问

Java中OutputStreamWriter和BufferedWriter的缓冲区有什么区别?

经过试验,OutputStreamWriter在写文件的时候是有缓冲区的,这个缓冲区和BufferedWriter类的缓冲区在使用上有什么区别?(除了WriterLine这点区别)

也就是说,实际上BufferedWriter类和BufferedReader类都有两层缓冲区,这两层缓冲区的作用分别是什么呢?

先谢过各位大神了!

1个回答

eagleyan
eagleyan   Rxr 2014.12.01 06:32
已采纳

首先OutputStreamWriter和BufferedWriter的缺省buffer size是不一样的OutputStreamWriter是8k bytes,BufferedWriter是8k chars。其次,OutputStreamWriter底层使用的是StreamEncoder,也就是对charset进行了编码,举个例子,你是完全可以本地采用比如gb2312的编码而写到一个utf-8文件里去的,这个时候你会用OutputStreamWriter。当然缺省的话是使用本地的charset。即使使用缺省的charset,OutputStreamWriter是会把没法转码的字符转成malformed surrogate,而BufferedWriter是不会的。
至于你说的两层缓冲,我猜你可能指的是写文件的时候,一般操作系统对文件都有自己的缓冲系统。但是这个只是因为底层是文件系统,假设你操作socket,采用buffer可以使得封包大小更合理。
还有一点,BufferedWriter封装的是writer,也就是当buffer满了让别的writer去处理输出,而OutputStreamWriter封装的事数据流(OutputStream),它是让数据流去处理输出。stream和writer的不同不用说,一个是二进制数据,一个是字符数据,这两个根本就不一样了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!