黑马程序员技术交流社区
标题:
有关FileWriter的flush问题??
[打印本页]
作者:
张善颖
时间:
2013-3-17 12:34
标题:
有关FileWriter的flush问题??
写了一个小程序,就是在一个文件中打印100个随机数,但是有点小问题,程序如下:
package com.sxtscience.msb.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestBufferedReader {
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("D:\\My programs\\JAVA\\first application\\src\\com\\sxtscience\\msb\\io\\TestBuffer.bat");
BufferedWriter bw = new BufferedWriter(fw);
BufferedReader br = new BufferedReader(new FileReader("D:\\My programs\\JAVA\\first application\\src\\com\\sxtscience\\msb\\io\\TestBuffer.bat"));
String line;
for(int i = 0; i < 100; i++) {
/*
* 在执行bw.write的时候并没有真正的把数据写入文件中,而是写入缓冲区
* 在文件关闭的时候才真正的写入了文件中
* */
bw.write(Double.toString(Math.random()));
bw.newLine();
}
// bw.flush(); //如果不加这一句的话会出现错误
while((line = br.readLine()) != null) {
System.out.println(line);
}
bw.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
flush是用来把缓冲区中的东西都写入文件中的吧,那为什么在FileOutputStream中不使用flush也没事呢?
还有我发现一个问题就是在使用FileOutputStream或是BufferedWriter的write()方法的时候,不会立刻把数据写入文件中,而是在文件关闭的时候才会写入,这又是什么原理呢,是不是内部运行时使用的是缓冲的机制?
作者:
赵亚威
时间:
2013-3-17 12:50
flush是把缓存区的写入的数据刷到指定的文件中 FileOutputStream是用来读取文件中的字符流的 文件本身就存在 不使用也不会出错 而FileInputStrean 时时刻刻在写入数据 但这样对于资源的消耗特别大 如果写入的数据量很大时 用缓存可以提高效率 所以为了提高效率我们我们才用缓存机制 所以如果不使用缓存技术那么不需要flush 如果使用必须得使用flush 不然无法在指定的文件中写入数据
作者:
谢洋
时间:
2013-3-17 15:41
1、通过反射击发现字节流没有缓冲区,但都实现了Flushable接口,字符流底封装了字节流,
2、我想字节流有flush方法的原因是:当字符写入流调用flush方法是,该方法会调用其内封的字节流的flush方法,
目的告诉底层字节流,把字符流XXX缓冲的内容写到文件中。
3、我想字符流算是字节流的一个包装类吧
作者:
董霁辉
时间:
2013-3-17 23:44
本帖最后由 董霁辉 于 2013-3-17 23:46 编辑
1、 flush方法,刷新流对象的缓冲中的数据,将数据写入目的地。2、flush刷新后,流可以继续使用 3、write方法,将字符串写入到流中。4、close方法,关闭流资源,但是关闭之前会刷新一次内部的缓冲区中的数据.
希望能对你有帮助
作者:
VOIDMAIN
时间:
2013-3-18 14:31
其实关键还是搞清楚字符流和字节流的关系就懂了,在IO流中,字节流是万能的,字符流是在字节流的基础上增加了编码来的,字符流需要刷新的原因是一方面是要调用字节流的,另外还需要查询编码,而字节流本身是否是实时发送,这也是可以设置的,其实这些都是规则,都是为了提高效率,有时候就和物理定理一样,没有为什么。
作者:
陈丽莉
时间:
2013-3-18 14:54
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2