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

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

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

报告相同问题?

悬赏问题

  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码