请问 为什么 read() 后不用清空 就可以读取文件 而write() 后必须用flush()后才能写文件
到底这个过程是怎么回事 我认为Writer是把数据先写到输出流里 然后必须手动的清空或者关闭流 要写的东西
才能被写到 目的文件中 可是Reader 为什么不用清空 也不用关闭流 就可以度取呢? 难道不是先把读到的东西先放入
流中吗 如果是 那为什么不清空呢?

解决方案 »

  1.   

    为了提高处理效率,write是写到缓冲区中,当缓冲区满或close时系统会自动将缓冲区的内容写入文件,所以一般是不需要调用flush的。不过如果你需要使write马上写入到文件中,就需要调用flush
      

  2.   

      FileOutputStream   file   =   new   FileOutputStream("c:\userInfo.ser");  
      ObjectOutputStream   out   =   new   ObjectOutputStream(file);  
      out.writeObject(user);  
      out.flush();  
      ......   
      

  3.   

    FileWriter 有缓冲区吗
    BufferedWriter(new FileWriter()) 才有吧
      

  4.   

    对于原始的OutputStream和Writer在write之后数据直接写入IO中,不需要flush(虽然接口中提供了flush方法),需要flush的是带缓冲的输出流,意义是把数据从缓冲区刷入IO,这样才能达到实际目的。
    对于输入流,当你read的时候你已经得到数据并保存到变量中了,已经达到了实际目的,没必要再去操作缓冲区。
      

  5.   

    其实写数据到文件也可以不用刷新,因为在你关闭流的时候底层已经调用了flush()刷新方法了。但是如果你要实现即时的将数据写入到文件中,就需要写一次就刷新一次。
    向文件写入数据时,不是直接就将数据向文件中写,而是先写到一个缓存区中,当你将缓冲区写满了,就会自动将缓存中的数据写入到文件中,并将缓存清空,这就是一次刷新的过程。读一下就刷新一次是防止你忘记手动关闭流而采取的策略。因为假设你忘记手动关闭流,而你最后一次缓存区又没有写满,那么这些数据就会一直保存在缓冲区中,而不会写入到文件中。
    所以为了以防万一,就每写一次就刷新一次,就可以及时的将数据都写入到文件中
      

  6.   

    write关系到写入文件的数据的完整性。read不涉及这个问题。
    不应该每write一次就flush一次,之所以用缓冲,就是为了提高IO操作的效率,如果每写一次都flush一次,不如不用缓冲,直接写文件好了。
      

  7.   

    那个 我不是问 要不要清空 和清空的好处和坏处 
    我要问的是 read()不用清空就可以读 这是为什么 这个过程是什么
    read()和write() 2个有什么区别 为什么都有缓冲 一个不清空就能读 一个必须清空才能写!
      

  8.   

    flush是把缓冲区中没有写出去的内容写入文件(或者是其它的流)。这关系到数据的完整性。
    对于read来说,如果缓冲中还有没有读完的数据,为什么要清空缓冲呢?如果读完了缓冲,会自动把新的数据从流中填入缓冲,我是这样理解的。
    对于write来说,也是一样,你可以一直writ,缓冲满了会自动把缓冲中的内容写入流。flush的作用就是缓冲还没有满时,把缓冲中的内容写出去。为什么write要flush?,那是因为当缓冲没有写满时,整个写操作结束了,比如程序要终止了,这时要把缓冲中剩余的内容写到流中,如果没有flush方法,缓冲中的内容不会自动写入流。而read就没有清空缓冲的理由。