问题描述
javaIO中,有专门的缓冲流,但同时操作系统本身也会设置缓冲区来进行输入输出。java的缓冲流是不是多此一举呢。如果除缓冲流外,其他流没有缓冲功能,那这些流的类为什么还有flush方法,来强制输出呢?在我编的一个程序中,使用文件输出流来向一个文件中写数据,如果不加上close方法就写不进去,这是否说明非缓冲流也有缓冲功能呢,这个缓冲功能是依赖于操作系统的缓冲功能得到的。
解决方案
解决方案二:
好高深啊,mark
解决方案三:
像文件中写数据write方法仅仅是将你要写的内容放入到缓存中并没有实际写入到文件,当flush()之后会刷新缓存中的内容,真正把内容写入到文件中,close()方法在关闭输入流之前会清空缓存中的内容,实际效果跟flush()差不多,close()之后就把流也关闭了。
解决方案四:
flush是刷新缓冲区的,不是强制输出的,close是关闭流的
解决方案五:
我可能没说清楚,当使用文件输出流FileWriter时,可以一个一个字符地写入文件。书上明确写着,如果不使用缓冲流,那么就要频繁地写磁盘,浪费时间。但实际上用起来好像也有缓冲啊
解决方案六:
学习.我怎么就没想哪么深入
解决方案七:
Java这边是内存到主板的缓冲,Windows那个不是很清楚但是主板到磁盘,磁盘到磁头还都有缓冲。
解决方案八:
引用4楼wsqcgcty的回复:
我可能没说清楚,当使用文件输出流FileWriter时,可以一个一个字符地写入文件。书上明确写着,如果不使用缓冲流,那么就要频繁地写磁盘,浪费时间。但实际上用起来好像也有缓冲啊
这个是你定义了一个byte[]数组,一般是这样的:byte[]by=newbyte[1024];这样在读取了1024个字节后才往文件里面写数据,如果不到就继续读,flush是刷新缓冲区的,比如读到最后小于1024个字节,调用flush就把剩余的字节全部写进文件
解决方案九:
flush是刷新缓冲区的close是关闭流的
解决方案十:
其实LZ,你去看看NIO吧,NIO就是利用系统本身的缓冲的,所以现在所有旧的IO都已经重写了