黑马程序员技术交流社区
标题:
关于OutputStream中的flush问题
[打印本页]
作者:
郝强勇
时间:
2013-2-26 10:08
标题:
关于OutputStream中的flush问题
本帖最后由 郝强勇 于 2013-3-1 14:19 编辑
先看下面这段弱弱的代码:
package cn.itheima.io;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
FileWriter fw = null;//创建字符写入流对象引用
FileOutputStream fos = null;//创建字节输出流对象引用
try {
fw = new FileWriter("F:\\Demo1.txt");
fos = new FileOutputStream("F:\\Demo2.txt");
String str = "Hello Heima!!!";
fw.write(str);//使用字符流向文件写出
fos.write(str.getBytes());//使用字节流向文件写出
} catch (IOException e) {
e.printStackTrace();
}
//没有在finally块中对两个流进行close关闭
}
}
在代码的末端未对流进行关闭,我们知道字节输出流OutputStream不需要刷新就会将代码直接写入物理设备中,我在运行后会发现FileWriter操作的文件Demo1.txt没有数据,FileOutputStream操作的文件Demo2中有数据,这属于正确运行,但是FileOutputStream不需要刷新为什么我在查API的时候也发现了它有flush()方法呢,我百思不得其解啊?
(备注:论坛名已提交修改,等待ing)
作者:
吴硕
时间:
2013-2-26 10:38
本帖最后由 吴硕 于 2013-2-26 10:41 编辑
FileOutputStream中的flush方法继承自OutputStream而并没有覆写,在OutputStream中的flush方法是空方法体,所以使用FileOutputStream调用flush方法执行的是空方法体
OutputStream有flush方法的原因是它不止FileOutputStream一个子类,其他子类可能会有刷新数据的需要
作者:
付玉光
时间:
2013-2-26 11:39
OutputStream 抽象类实现了Flushable 接口中的flush()方法,但该方法体为空,也就是不
执行任何操作,这是因OutputStream 本身也是一个抽象类,其具体的flush()方法应该由它
的具体子类来实现,比如:BufferedOutputStream类因为用到了缓存技术,所以就覆写了
类 FilterOutputStream 中的 flush方法,(类 FilterOutputStream 中的flush方法覆写了
OutputStream 中的方法),至于你说的(FileOutputStream不需要刷新为什么我在查API的
时候也发现了它有flush()方法呢),那是因为FileOutputStream继承自OutputStream ,所以
拥有父类的这个方法,该类是直接操作字节数据的,没用到缓存技术,所以也不用覆写
父类中的该方法。
这个只是我自己的理解,希望对你有帮助!
作者:
陈丽莉
时间:
2013-2-26 17:35
希望尽快改名字,这是地址:
论坛改名申请通道
然后如果觉得问题理解了,将帖子分类改成【已解决】,谢谢合作~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2