黑马程序员技术交流社区

标题: IO的小疑问 [打印本页]

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


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


作者: 秦冲    时间: 2012-5-29 09:38
应该是缓冲区的问题,字符流有缓冲区,不会马上写入文件中。凡是使用的缓冲区的话,你都得先flush下,或者最后close(它在关闭前会先刷新缓冲区)。
作者: 胡团乐    时间: 2012-5-29 09:48
输出流调用close方法是会自动flush,由于字符流不是一个字节一个字节的写入,在不调用close方法的情况下,他需要flush;
而字节流本身就是一个字节一个字节的写入,所以对于jvm来说掉不掉用flush效果都一样,都会写入文件;
作者: 黑马张健    时间: 2012-5-29 09:59
这个问题,其实要考虑的是字节流与字符流的write方法。
字节流write方法:write方法会调用内部的flush方法来刷新缓冲区。其他的则不调用flush方法。
字符流write方法:write方法内部没有调用flush()刷新方法。所以一定要调用flush方法,或者记得关闭流资源调用close方法。这样才能把字符写入到文件中去。
作者: 钟成军    时间: 2012-5-29 12:47
字节流本来就是一个一个的写入的,所以即使不刷新,也能够正常写入,它没有缓冲区;
而字符流则不同,因为它要有缓冲区,在缓冲区存放一定数量的字节(即字符流)后,刷新一下就会写入,如果不刷新,即不调用flush或者close方法,它是不会写入的,因为这时这时意味着缓冲区还没有写完,还要继续写入。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2