A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝强勇 中级黑马   /  2013-2-26 10:08  /  6915 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郝强勇 于 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)

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 请尽快改名字好吗? 论坛置顶帖有改名通道.

查看全部评分

3 个回复

正序浏览
希望尽快改名字,这是地址:  论坛改名申请通道

然后如果觉得问题理解了,将帖子分类改成【已解决】,谢谢合作~
回复 使用道具 举报

OutputStream 抽象类实现了Flushable 接口中的flush()方法,但该方法体为空,也就是不

执行任何操作,这是因OutputStream 本身也是一个抽象类,其具体的flush()方法应该由它

的具体子类来实现,比如:BufferedOutputStream类因为用到了缓存技术,所以就覆写了

类 FilterOutputStream 中的 flush方法,(类 FilterOutputStream 中的flush方法覆写了

OutputStream 中的方法),至于你说的(FileOutputStream不需要刷新为什么我在查API的

时候也发现了它有flush()方法呢),那是因为FileOutputStream继承自OutputStream ,所以

拥有父类的这个方法,该类是直接操作字节数据的,没用到缓存技术,所以也不用覆写

父类中的该方法。

这个只是我自己的理解,希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 吴硕 于 2013-2-26 10:41 编辑

FileOutputStream中的flush方法继承自OutputStream而并没有覆写,在OutputStream中的flush方法是空方法体,所以使用FileOutputStream调用flush方法执行的是空方法体

OutputStream有flush方法的原因是它不止FileOutputStream一个子类,其他子类可能会有刷新数据的需要

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马