黑马程序员技术交流社区

标题: PrintWriter中是否有缓冲区? [打印本页]

作者: 韦念欣    时间: 2012-7-1 22:56
标题: PrintWriter中是否有缓冲区?
本帖最后由 韦念欣 于 2012-7-2 21:24 编辑

PrintWriter在打印数据的时候,有自动刷新功能,那里面是否封装了一个缓冲区呢?

作者: Forever。    时间: 2012-7-1 23:22
本帖最后由 Forever。 于 2012-7-1 23:24 编辑

肯定有缓冲区的啊,字符流肯定都有缓冲区的,不然要他们怎么提高效率呢?调用flush方法可以将缓冲区中的东西强行输出。
outputstream就有这个flush这个方法 只不过他什么都没干,凡是继承Writer这个抽象类的肯定都对flush方法做了重写 因为他们都有缓冲这个东西。
作者: 黑马罗坚    时间: 2012-7-2 20:41
有   如果你构造时传入的不是字符流 它会帮你包装成bufferedWriter流 缓存一个8k的char数组 而我们知道buffered 流需要flush;   传入的是字符流的话 它不会帮你包装 你传入的是什么就是什么  字符流底层调用的是StreamEncoder StreamEncoder里面有个缓存 写的东西都写进了StreamEncoder的缓存里面去了 所以你要调用flush刷新缓存   你如果在构造函数里指定了自动刷新 调用3个指定的刷新缓存的方法时 掉完了StreamEncoder的wrtie写数据到缓存后  会在调用StreamEncoder。flush();刷新缓存里的数据
作者: 韦念欣    时间: 2012-7-2 21:24
nailsoul 发表于 2012-7-2 20:41
有   如果你构造时传入的不是字符流 它会帮你包装成bufferedWriter流 缓存一个8k的char数组 而我们知道buff ...

原来是这样,谢谢啦!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2