开发者社区> 问答> 正文

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

经过试验,OutputStreamWriter在写文件的时候是有缓冲区的,这个缓冲区和BufferedWriter类的缓冲区在使用上有什么区别?(除了WriterLine这点区别)
也就是说,实际上BufferedWriter类和BufferedReader类都有两层缓冲区,这两层缓冲区的作用分别是什么呢?
先谢过各位大神了!

展开
收起
蛮大人123 2016-02-20 17:27:29 4036 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    首先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的不同不用说,一个是二进制数据,一个是字符数据,这两个根本就不一样了。

    2019-07-17 18:45:33
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载