经过试验,OutputStreamWriter在写文件的时候是有缓冲区的,这个缓冲区和BufferedWriter类的缓冲区在使用上有什么区别?(除了WriterLine这点区别)
也就是说,实际上BufferedWriter类和BufferedReader类都有两层缓冲区,这两层缓冲区的作用分别是什么呢?
先谢过各位大神了!
经过试验,OutputStreamWriter在写文件的时候是有缓冲区的,这个缓冲区和BufferedWriter类的缓冲区在使用上有什么区别?(除了WriterLine这点区别)
也就是说,实际上BufferedWriter类和BufferedReader类都有两层缓冲区,这两层缓冲区的作用分别是什么呢?
先谢过各位大神了!
首先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的不同不用说,一个是二进制数据,一个是字符数据,这两个根本就不一样了。