Java语言中flush()函数作用及使用方法详解
最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下
//——————–flush()的作用————————–
笼统且错误的回答:
缓冲区中的数据保存直到缓冲区满后才写出,也可以使用flush方法将缓冲区中的数据强制写出或使用close()方法关闭流,关闭流之前,缓冲输出流将缓冲区数据一次性写出。flash()和close()都使数据强制写出,所以两种结果是一样的,如果都不写的话,会发现不能成功写出
针对上述回答,给出了精准的回答
fileoutputstream继承outputstream,并不提供flush()方法的重写所以无论内容多少write都会将二进制流直接传递给底层操作系统的i/o,flush无效果而buffered系列的输入输出流函数单从buffered这个单词就可以看出他们是使用缓冲区的,应用程序每次io都要和设备进行通信,效率很低,因此缓冲区为了提高效率,当写入设备时,先写入缓冲区,等到缓冲区有足够多的数据时,就整体写入设备
使用bufferedxxxstream。默认缓冲区大小是8k。读的时候会一直填满缓冲区(或者文件读取完毕),写的时候也是等缓冲区满了之后(或者执行flush操作)才将内容送入内核缓冲区。效率高的原因就是避免了每读一个字节都要陷入操作系统内核(这是个耗时的操作)。具体代码,题主自己查api吧。
再附上来自百度知道的一段问题回答。
flush()意思是把缓冲区的内容强制的写出。 因为操作系统的某些机制,为了防止一直不停地磁盘读写,所以有了延迟写入的概念,(注意不要和frush()刷新混淆了),主要用在io中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。。
在网络web服务器上也是,为了防止写一个字节就发送一个消息,所以有缓冲区的概念,比如64k的内存区域,缓冲区写满了再一次性写入磁盘之中(或者发送给客户端浏览器)。
flush方法一般是程序写入完成时执行。随后跟着close方法。例如:
// 取得输出流。当然,看具体环境。 printwriter out = util.getwriter(); out.println("输出一些信息,可能很多"); out.flush(); out.close();
简单来说,flush()方法是输出储存在内存中全部的内容(批量输出)。 常用比如filewriter类中就是一个典型,除了可以使用flush输出,最后调用close方法也会批量输出。
import java.io.filewriter; import java.io.ioexception; public class a04 { public static void main(string args[]) { filewriter fw; try { fw = new filewriter("c:\\try.txt"); fw.write("hello"); //fw.close(); //这句话不加,无法写入文件,文件空白! system.out.println("ok"); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } } }
总结
以上就是本文关于java语言中flush函数作用及使用方法详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!