Writer的flush()方法,深究

坟墓里的爱情 2014-06-16 01:38:20
知道是把缓存中的内容读入读出。但是了解不是很具体。以写为例,

package com.donghe.package1;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Writer {

public static void main(String[] args) {
BufferedWriter fw =null;
try {
fw = new BufferedWriter(new FileWriter("e:\\test.txt"));
fw.write("wo shi lucky girl.");
//fw.flush();
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

/fw.flush();这句有和无并不影响输出结果,不太明白词句是否必要。
...全文
7506 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
西南黑少 2015-07-03
  • 打赏
  • 举报
回复
其实是满了 才冲一下 最后那点可能没满 所以要用flush
冰思雨 2014-06-19
  • 打赏
  • 举报
回复
close方法在关闭流之前,会强制刷新一下IO缓冲,这个在API里面也有提到。 flush方法,就是强制刷新 缓冲区的一种方式。
求注销 2014-06-17
  • 打赏
  • 举报
回复
引用 3 楼 fanghui88 的回复:
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();
		}
	}
}
因为字节流失没有缓冲区的
我爱小猴子 2014-06-17
  • 打赏
  • 举报
回复
引用 2 楼 fengerpiao123 的回复:
缓冲区中的数据保存直到缓冲区满后才写出,也可以使用flush方法将缓冲区中的数据强制写出或使用close()方法关闭流,关闭流之前,缓冲输出流将缓冲区数据一次性写出。lz的例子中,flash()和close()都使数据强制写出,所以两种结果是一样的,如果都不写的话,会发现不能成功写出
FileOutPutStream继承outputStream,并不提供flush()方法的重写 所以无论内容多少write都会将二进制流直接传递给底层操作系统的I/O,flush无效果 而Buffered系列的输入输出流函数单从Buffered这个单词就可以看出他们是使用缓冲区的 应用程序每次IO都要和设备进行通信,效率很低,因此缓冲区为了提高效率,当写入设备时,先写入缓冲区,等到缓冲区有足够多的数据时,就整体写入设备
LinY_X 2014-06-17
  • 打赏
  • 举报
回复
其实是满了 才冲一下 最后那点可能没满 所以要用flush
zhjdg 2014-06-17
  • 打赏
  • 举报
回复
看源代码就知道。 来个最简单的。
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();
致知Fighting 2014-06-17
  • 打赏
  • 举报
回复
flush的应用场景不是这样的,close的时候会自动调用flush,所以没有人会在close前显式的再调用一次。 flush的语义是强制将缓冲里的数据写入流里
坟墓里的爱情 2014-06-17
  • 打赏
  • 举报
回复
引用 1 楼 shine333 的回复:
因为close的时候,会把你没flush掉的一起flush掉。 举个恶心但贴切(flush原意)的例子你的fw好比一个抽水马桶 每个人用完都冲一下(flush),直到最后你要拆掉它的时候(close)拆他的人,会强制冲(fush)一下
难道每个人冲,冲不干净?非得最后flush一下?
坟墓里的爱情 2014-06-17
  • 打赏
  • 举报
回复
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();
		}
	}
}
fengerpiao123 2014-06-16
  • 打赏
  • 举报
回复
缓冲区中的数据保存直到缓冲区满后才写出,也可以使用flush方法将缓冲区中的数据强制写出或使用close()方法关闭流,关闭流之前,缓冲输出流将缓冲区数据一次性写出。lz的例子中,flash()和close()都使数据强制写出,所以两种结果是一样的,如果都不写的话,会发现不能成功写出
shine333 2014-06-16
  • 打赏
  • 举报
回复
因为close的时候,会把你没flush掉的一起flush掉。 举个恶心但贴切(flush原意)的例子你的fw好比一个抽水马桶 每个人用完都冲一下(flush),直到最后你要拆掉它的时候(close)拆他的人,会强制冲(fush)一下
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 全球数据治理的发展趋势; 数据合规相关的法规标准以及重点案例的收集; 数据安全领域的标准与产业应用实践; 数字转型时代中数据流转所面临的风险控制; 运用人工智能技术进行的大数据安全保障; 各类厂商提供的数据安全防护措施; 完整的数据治理总体方案; 针对数据安全的治理解决方案; 【行业权威机构推荐】数据安全治理的建设指导手册; 企业数据防止信息泄露的体系化咨询服务完整资料; 阿里云在大数据安全方面的实践经验分享; 大数据安全等级保护过程中遇到的挑战及应对策略; 以风险为基础的数据完整性管理实践指导文件; 数据安全管理的相关法规条例; CSA组织发布的大数据安全与隐私保护手册中文翻译版本; GDPR框架下的数据合规性要求; 通过数据资产管理视角探讨数据安全监管; 大数据安全治理的汇编资料(共计四篇); 大数据安全的相关标准规范; 大数据应用场景中的隐性隐私安全隐患; 大数据应用环境下的隐私保护及风险控制技术; 数字化时代背景下的隐私保护策略; 等级保护2.0标准下的数据安全解决方案; 国际上通用的数据管理能力成熟度评估模型; 华为公司在大数据安全管理方面的实践经验; 企业数据安全能力体系框架_数据安全能力成熟度模型的构建与实际应用; 企业数据管理领域的理论知识和实践操作; 从零开始构建企业数字化运营全流程白皮书; 数据安全领域的权威白皮书; 数据安全能力建设的实施指导手册; 数据安全治理领域的白皮书及配套演示文稿; 数据安全治理的具体实施方案; 数据安全的多维度综合防御体系; 数据跨境传输的安全解决方案; 数据安全治理的技术支撑架构; 金融行业数据安全治理模型及实践案例; 涵盖但...

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧