小弟想知道java.io中 flush 和 close的具体功能,最好能又源代码(这个2个method的源代码,网上找了好久也没找到)。最近在做一个项目,DataOutputStream作为输出,在writeBytes写好输出的语句后。为什么要调用flush和close 这2个method才能输出到文件中。 按照flush的使用说明应该是调用flush就能输出到文件中,可是只是用flush的话好像没有反应。在API中发现,DataOutputStream的flush从OutputStream类中继承来的。而在OutputStream中flush是不执行任何操作的,难道flush这个只是个摆设?没有任何意义?希望高人指点啊,先在这里膜拜了,嘻嘻

解决方案 »

  1.   

    public void flush()刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。 
      

  2.   

    因为我们常常用OutputStream去引用DataOutputStream等等它的子类.所以如果它没有定义flush这个方法,我们就无法用OutputStream这个引用去执行flush.
    例如:
    OutputStream os=new DataOutputStream();或:
    OutputStream os=new URLConnection("...").getOutputStream();//这个方法实际是返回的OutputStream的子类.
    如果OutputStream没有flush这个空方法,我们就无法执行os.flush();
      

  3.   

    那么也就是说,在OutputStream中执行flush没有什么作用。缓存中的字节是在运行close的时候才刷新输出的。
      

  4.   

    有些方法会嵌入flush方法, 就不用我们调用了。 有些没有自动调用flush方法, 需要我们显示调用。 但总的来说, flush是有用的。 英文java虚拟机对输入,输出是作了缓冲处理的, 缓冲机制特别是对大量数据操作, 尤其重要。
      

  5.   

    flush和close连在一起就有效果(输出字节),而单用flush就没有什么效果