jacobvv 2014-11-20 16:12 采纳率: 50%
浏览 6228
已采纳

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

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

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

先谢过各位大神了!

  • 写回答

1条回答 默认 最新

  • Coursera 2014-11-30 22: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的不同不用说,一个是二进制数据,一个是字符数据,这两个根本就不一样了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?