Writer的flush()方法,深究 因为close的时候,会把你没flush掉的一起flush掉。举个恶心但贴切(flush原意)的例子你的fw好比一个抽水马桶每个人用完都冲一下(flush),直到最后你要拆掉它的时候(close)拆他的人,会强制冲(fush)一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 缓冲区中的数据保存直到缓冲区满后才写出,也可以使用flush方法将缓冲区中的数据强制写出或使用close()方法关闭流,关闭流之前,缓冲输出流将缓冲区数据一次性写出。lz的例子中,flash()和close()都使数据强制写出,所以两种结果是一样的,如果都不写的话,会发现不能成功写出 to2楼,是这样的!谢谢我还有个疑问,下面这段代码不写flash()和close()也能正常输出,为啥呢?package com.donghe.package1;import java.io.FileOutputStream;import java.io.FileWriter;public class FileOutPutDemo { public static void main(String[] args) { String path = "e:\\test.txt"; FileOutputStream fo = null; try { fo = new FileOutputStream(path); for (int i=0;i<10;i++){ fo.write(65); } //fo.close(); } catch (Exception e) { e.printStackTrace(); } }} 难道每个人冲,冲不干净?非得最后flush一下? flush的应用场景不是这样的,close的时候会自动调用flush,所以没有人会在close前显式的再调用一次。flush的语义是强制将缓冲里的数据写入流里 看源代码就知道。来个最简单的。File f = new File("e:\\test.txt"); OutputStream f1 = new FileOutputStream(f); OutputStream o = new BufferedOutputStream(f1); o.write(97); o.write(97); o.write(122); //o.flush(); o.write(100); o.close(); 其实是满了 才冲一下最后那点可能没满 所以要用flush FileOutPutStream继承outputStream,并不提供flush()方法的重写所以无论内容多少write都会将二进制流直接传递给底层操作系统的I/O,flush无效果而Buffered系列的输入输出流函数单从Buffered这个单词就可以看出他们是使用缓冲区的应用程序每次IO都要和设备进行通信,效率很低,因此缓冲区为了提高效率,当写入设备时,先写入缓冲区,等到缓冲区有足够多的数据时,就整体写入设备 close方法在关闭流之前,会强制刷新一下IO缓冲,这个在API里面也有提到。flush方法,就是强制刷新 缓冲区的一种方式。 try...catch问题 java程序成功发送了邮件,为何在邮箱中找不到邮件? 0000-00-00 00:00:00问题 请帮忙解决一下如何用JAVA做一个不容易关掉的网页的代码 谢谢!!! 还是把java弄成exe的问题 那位大哥能救救我, 关于短信猫发送手机短信,无法发送成功 erp和mis有何区别啊 请教:在Java中如何自销毁一个对象,或如何销毁一个对象? 我的Applet中Mouse事件好像没有触发?为什么 java的客户端除了APP还有什么? sqlserver 结果集问题请教。 HTTP Status 404 - /Test/userLogin.action
我还有个疑问,下面这段代码不写flash()和close()也能正常输出,为啥呢?package com.donghe.package1;import java.io.FileOutputStream;
import java.io.FileWriter;public class FileOutPutDemo { public static void main(String[] args) {
String path = "e:\\test.txt";
FileOutputStream fo = null;
try {
fo = new FileOutputStream(path);
for (int i=0;i<10;i++){
fo.write(65);
}
//fo.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
难道每个人冲,冲不干净?非得最后flush一下?
来个最简单的。
File f = new File("e:\\test.txt");
OutputStream f1 = new FileOutputStream(f);
OutputStream o = new BufferedOutputStream(f1);
o.write(97);
o.write(97);
o.write(122);
//o.flush();
o.write(100);
o.close();
最后那点可能没满 所以要用flush
FileOutPutStream继承outputStream,并不提供flush()方法的重写
所以无论内容多少write都会将二进制流直接传递给底层操作系统的I/O,flush无效果
而Buffered系列的输入输出流函数单从Buffered这个单词就可以看出他们是使用缓冲区的
应用程序每次IO都要和设备进行通信,效率很低,因此缓冲区为了提高效率,当写入设备时,先写入缓冲区,等到缓冲区有足够多的数据时,就整体写入设备
flush方法,就是强制刷新 缓冲区的一种方式。