A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韦念欣 黑马帝   /  2012-7-1 22:56  /  4391 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韦念欣 于 2012-7-2 21:24 编辑

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

4 个回复

倒序浏览
本帖最后由 Forever。 于 2012-7-1 23:24 编辑

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

原来是这样,谢谢啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马