黑马程序员技术交流社区

标题: io流的一个问题 [打印本页]

作者: 于世德    时间: 2013-7-12 12:54
标题: io流的一个问题
FileOutputStream中有个write(byte[] buf)方法,该方法内部会调用flush()方法,而FileWriter中的write(char[] buf)内部中没有调用flush()方法,类库的设计者为什么要这样设计呢?
作者: 在乎..    时间: 2013-7-12 13:08
因为FileOutputStream继承自OutputStream ,所以拥有父类OutputStream的这个方法,该类是直接操作字节数据的,没用到缓存技术,所以也不用覆写flush()方法,而FileWrite操作的是字符数据,因为字符代表了两个字节,此处有缓存技术,所以它就要flush()了,希望对你有帮助。
作者: 于世德    时间: 2013-7-12 13:23
在乎.. 发表于 2013-7-12 13:08
因为FileOutputStream继承自OutputStream ,所以拥有父类OutputStream的这个方法,该类是直接操作字节数据 ...

为啥操作字节就不用缓存技术了呢?不太明白
作者: 在乎..    时间: 2013-7-12 13:34
于世德 发表于 2013-7-12 13:23
为啥操作字节就不用缓存技术了呢?不太明白

我不是说操作字节流就不用flush()哦,我的理解是,FileOutputStream中的flush方法继承自OutputStream而并没有复写,在OutputStream中的flush方法是空方法体,OutputStream有flush方法的原因是它不FileOutputStream一个子类,当你是用FileOutputStream一个字节一个字节存,不用缓存技术了吧! 就像杯子装自来水,自来水都一滴一滴地流,你需要用杯子接吗?而Bufferedoutputstream用到了缓存技术,它不是一个字节一个字节地接水,因此OutputStream是 提供这个方法的,只是有些类用到,有些类没有用到(没有复写)而已。
作者: 于世德    时间: 2013-7-12 16:50
在乎.. 发表于 2013-7-12 13:34
我不是说操作字节流就不用flush()哦,我的理解是,FileOutputStream中的flush方法继承自OutputStream而并 ...

哦,明白一点了




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