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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝少普 中级黑马   /  2012-11-26 13:00  /  1579 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sp000 于 2012-11-27 15:01 编辑

此问题来源于卢同学,求解答
1.BufferedInputStream 与 FilterInputStream 的不同,后者有没有缓冲区?
2.flush()的方法从哪来?给谁用, FilterInputStream 有没有flush()方法,在这有什么用?

个人猜想,flush()不是由java实现的。。。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
FilterInputStream是BufferedInputStream 的父类,而FilterInputStream继承自InputStream。 当我们使用write方法时,只是把内容写到缓冲区,而没有真正写到存储设备上,当调用了flush方法,也就是把缓冲区的内容刷新,这样才能写到到存储数据物理设备上。有些类没有明写有没有缓存,比如网络或设备操作的时候一些仅以OutputStream接口形式得到的流。个人觉得FilterInputStream 是有缓冲区的 (因为FilterOutputStream 有flush方法,他俩是一对嘛{:soso_e100:})。还有缓冲区就是为了解决速度不匹配问题,比如,高速的cpu与内存,内存与硬盘,cpu与io等速度不匹配的问题,而引人缓冲区,比如我们从磁盘里读取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中读取数据,等缓冲区的数据读取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低俗的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU。解放出CPU,使其能够高效率工作。flush方法是为了强制输出缓冲区的数据,就是为了给带缓冲区的类用呗。个人知识有限,期待各位大侠指正。但是为什么你猜想flush不是java实现的呢?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
只有写的字节流或字符流才有flush()方法为了刷新缓存区让缓存区写入目的文件数据里,而读的怎么会有flush()方法呢. FilterInputStream是一个一个的读,而BufferedInputStream有缓冲区提高读的效率。
回复 使用道具 举报
吴新 发表于 2012-11-26 19:46
FilterInputStream是BufferedInputStream 的父类,而FilterInputStream继承自InputStream。 当我们使用writ ...

你找得到 flush() 方法的源代码吗?
回复 使用道具 举报
本帖最后由 刘文飞 于 2012-11-26 22:56 编辑
sp000 发表于 2012-11-26 22:48
你找得到 flush() 方法的源代码吗?
  1. package java.io;

  2. import java.io.IOException;

  3. /**
  4. * A <tt>Flushable</tt> is a destination of data that can be flushed.  The
  5. * flush method is invoked to write any buffered output to the underlying
  6. * stream.
  7. *
  8. * @since 1.5
  9. */

  10. public interface Flushable {

  11.     /**
  12.      * Flushes this stream by writing any buffered output to the underlying
  13.      * stream.
  14.      *
  15.      * @throws IOException If an I/O error occurs
  16.      */
  17.     void flush() throws IOException;
  18. }
复制代码
回复 使用道具 举报
刘文飞 发表于 2012-11-26 22:54

我是说,flush()方法的实现,这里只是一个接口。。。
回复 使用道具 举报
sp000 发表于 2012-11-26 22:59
我是说,flush()方法的实现,这里只是一个接口。。。

木有。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马