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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾旭 中级黑马   /  2012-5-29 09:27  /  1530 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.发现在使用字符流写文件时如果写操作完成后不调用close方法,生成的文件为空;
2.而使用字节流写文件,写完后不调用close,文件生成无异常,为什么会这样?
记得老毕好像讲过的,但是忘了为什么了
JVM对字节流和字符流的处理到底有哪些不同?
说下我自己的理解:


1.不调用Close方法,生成的文件为空是因为没有运行flush()方法
2.不懂了

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

正序浏览
字节流本来就是一个一个的写入的,所以即使不刷新,也能够正常写入,它没有缓冲区;
而字符流则不同,因为它要有缓冲区,在缓冲区存放一定数量的字节(即字符流)后,刷新一下就会写入,如果不刷新,即不调用flush或者close方法,它是不会写入的,因为这时这时意味着缓冲区还没有写完,还要继续写入。
回复 使用道具 举报
这个问题,其实要考虑的是字节流与字符流的write方法。
字节流write方法:write方法会调用内部的flush方法来刷新缓冲区。其他的则不调用flush方法。
字符流write方法:write方法内部没有调用flush()刷新方法。所以一定要调用flush方法,或者记得关闭流资源调用close方法。这样才能把字符写入到文件中去。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
输出流调用close方法是会自动flush,由于字符流不是一个字节一个字节的写入,在不调用close方法的情况下,他需要flush;
而字节流本身就是一个字节一个字节的写入,所以对于jvm来说掉不掉用flush效果都一样,都会写入文件;

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
应该是缓冲区的问题,字符流有缓冲区,不会马上写入文件中。凡是使用的缓冲区的话,你都得先flush下,或者最后close(它在关闭前会先刷新缓冲区)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马