writer 子类的write()方法是吧字符或者字符数组写入到流中 通过 flush()方法把流中字符刷到目的地中outputstream子类的 write()是吧字符直接写入目标文件? 他并没有flush()这样的方法  流是如何体现的?小弟新手在这混沌了。望解答

解决方案 »

  1.   

    你可以看看源码,我记得他好像是在close的时候自动调用了flush 或者其他地方
      

  2.   

    writer类确实是会自动在close()方法前调用flush() 
    但是 outputstream类就不晓得了,才研究io流几天 看后混淆 ,混淆再看。
      

  3.   

    outputstream子类的 write()是吧字节直接写入目标文件,任何输出流都带flush()的。
      

  4.   

    对啊 我就是看到这点 我想他体现不出流这个概念啊 为什么 writer子类可以自己调用fiush()方法
    而outputstream子类却不能呢?
      

  5.   

     直接这样写吧     假如对象为out   则 out.close();    直接刷新
      

  6.   

    好像在源代码里面没有看见close时调用flush
      

  7.   

    write()是写到流中并没有写到文件里,flush()是将流中的数据压到文件中
      

  8.   

    所以说outputstream没有flush()方法 他就直接写到文件了? 那不就没有流这个概念了么。
      

  9.   

    flush()是把缓存的数据写入到流中吧。
      

  10.   

    C语言定义 下一个write函数、flush函数、close函数会把缓存的数据写入到流中,Java是C实现的,估计也是这样。
      

  11.   

    流对象就是系统给分配的内存对吧,flush()不是应该把这个对象存储的数据写入目标文件?怎么是写入到流中?
      

  12.   

    任何ouputstream都是有flush方法的,这点毫无疑问。write方法的说明将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。 flush方法的说明刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。 
    如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。 
    另外养成流写完以后flush一下再关闭是个好习惯
      

  13.   

    构造方法摘要 
    OutputStream() 
                
      方法摘要 
     void close() 
              关闭此输出流并释放与此流有关的所有系统资源。 
     void flush() 
              刷新此输出流并强制写出所有缓冲的输出字节。 
     void write(byte[] b) 
              将 b.length 个字节从指定的 byte 数组写入此输出流。 
     void write(byte[] b, int off, int len) 
              将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 
    abstract  void write(int b) 
              将指定的字节写入此输出流。 
      

  14.   

    http://blog.sina.com.cn/s/blog_507ec89d01009eo3.html
      

  15.   

    这个是我查的JDK的文档,请问LZ哪里看到木有flush方法?到底有木有?
      

  16.   

    既然是子类,那就可以调用啊,outputstream里面没写不要紧,一样可以用