java IO中,有专门的缓冲流,但同时操作系统本身也会设置缓冲区来进行输入输出。java的缓冲流是不是多此一举呢。
如果除缓冲流外,其他流没有缓冲功能,那这些流的类为什么还有flush方法,来强制输出呢?在我编的一个程序中,使用文件输出流来向一个文件中写数据,如果不加上close方法就写不进去,这是否说明非缓冲流也有缓冲功能呢,这个缓冲功能是依赖于操作系统的缓冲功能得到的。

解决方案 »

  1.   

    像文件中写数据 write方法仅仅是将你要写的内容放入到缓存中并没有实际写入到文件,当flush()之后会刷新缓存中的内容,真正把内容写入到文件中,close()方法在关闭输入流之前会清空缓存中的内容,实际效果跟flush()差不多,close()之后就把流也关闭了。
      

  2.   

    flush是刷新缓冲区的,不是强制输出的,close是关闭流的
      

  3.   

    我可能没说清楚,当使用文件输出流FileWriter时,可以一个一个字符地写入文件。书上明确写着,如果不使用缓冲流,那么就要频繁地写磁盘,浪费时间。但实际上用起来好像也有缓冲啊
      

  4.   

    Java这边是内存到主板的缓冲,Windows那个不是很清楚
    但是主板到磁盘,磁盘到磁头还都有缓冲。
      

  5.   

    这个是你定义了一个byte[]数组,一般是这样的:
    byte[] by = new byte[1024];这样在读取了1024个字节后才往文件里面写数据,如果不到就继续读,flush是刷新缓冲区的,比如读到最后小于1024个字节,调用flush就把剩余的字节全部写进文件
      

  6.   

    flush是刷新缓冲区的 close是关闭流的
      

  7.   

    其实LZ,你去看看NIO吧,NIO就是利用系统本身的缓冲的,所以现在所有旧的IO都已经重写了