黑马程序员技术交流社区
标题:
flush();究竟在什么时候用?
[打印本页]
作者:
李东梁
时间:
2014-3-26 08:58
标题:
flush();究竟在什么时候用?
本帖最后由 李东梁 于 2014-3-26 09:00 编辑
public static void main(String[] args) throws IOException {
/*
* 获取键盘录入数据,并保存在硬盘上。
*/
//读取键盘。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//读取目的。
BufferedWriter bufw = new BufferedWriter(new FileWriter("temp\\test2.txt"));
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
if("over".equals(line)){
break;
}
}
bufw.close();
bufr.close();
//像这个里面的flush用与不用不都是样的吗?
复制代码
作者:
xuehuayous
时间:
2014-3-26 09:30
abstract void flush()刷新该流的缓冲,abstract void close()关闭此流,但要先刷新它。
都是是Writer类的方法。
简单来说就是字节流读取的时候要刷新,但是又分为单纯刷新和关闭刷新:
close和flush的区别:
flush刷新后,流可以继续使用,
close刷新后会关闭流。
希望对你有帮助!
作者:
王竞
时间:
2014-3-26 09:58
在使用Buffered*这种类的时候,因为类中设计有缓冲区,缓冲区是有大小限制的,只有将缓冲区存满了以后,jvm才会将数据刷入你的目的地,这个原理就能我们计算机的硬盘的工作原理是一样的,都是先缓存,然后缓存满了在写入数据到硬盘上,这样可以提高硬盘的读写速度和性能。同理代码中也是一样的,为了提高速度。 至于什么时候需要刷新,就看你的需求了,如果你是需要每次读取完成以后,就能将数据写入到目的地,那么就需要读完了,马上就刷。 另外flush()和close()是有区别的,flush只是将缓存的数据刷入目的地,而close()是先刷,刷了以后再关闭占用的系统资源。比如我们读写硬盘数据都是操作系统帮我们完成的,他去操作的具体的硬件
作者:
龙健
时间:
2014-3-26 10:02
对于你这个问题,如果你是由键盘输入,读入文件,不容易发现flush与close的区别的。我想楼主也不够仔细吧,就从你这个方法说吧:清空test2里面的数据,运行程序,输入一行数据,再去看test里面的变化,最后over结束。注释bufw.flush()。再次清空test文件(只是为了你看着比较方便而已),运行程序,看看test里面的变化,最后over,我想这样说你应该懂了吧,flush是读一行就往test里面写入一一行,而close是知道遇到over才往test里面写。给出一个比较明显的实例:
import java.io.*;
public class Demo1 {
public static void main(String[] args) throws IOException {
/*
* 获取键盘录入数据,并保存在硬盘上。
*/
//读取键盘。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
//将目的从文件转移到控制台
//读取目的。
// BufferedWriter bufw = new BufferedWriter(new FileWriter("test2.txt"));
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
//运行两次,一次注释bufw.flush(),一次不注释,一目了然。
if("over".equals(line)){
break;
}
}
bufw.close();
bufr.close();
}
}
复制代码
作者:
H-Deka
时间:
2014-3-26 10:15
字符流写入数据时需要刷新flush()只要你操作的是文本数据,就使用就对了,
字节流不需要使用了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2