JAVA:OutputStream流的flush()方法介绍,该方法的“刷新此输出流”,这句是什么意思?
关注:294 答案:2 mip版
解决时间 2021-02-02 07:14
提问者这笑,有多危险
2021-02-01 20:40
JAVA:OutputStream流的flush()方法介绍,该方法的“刷新此输出流”,这句是什么意思?
最佳答案
二级知识专家趁我还喜欢
2021-02-01 21:41
您好,提问者:
我举个例子,比如你写入:123
此时没有调用flush()也没有调用close()方法,那么该内容就不会写到内存中,而是写入到了内存流中。
flush()就是将内存流中的内容写入到文件中并且清空内存流中的内容。
当调用close()方法时,里面也会调用flush();
全部回答
1楼爷自有爷的范
2021-02-01 22:04
flush
public void flush()throws ioexception
刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。
什么是预期的目标?比如对于输入出流fileoutputstream("1.txt"),文件"1.txt"就是它预期的目标。上体请看下面的程序。
import java.io.*;
public class aboutflush
{
public static void main(string args[]){
try{
fileinputstream fis=new fileinputstream("1.pdf");
fileoutputstream fos=new fileoutputstream("2.pdf");
byte b[]=new byte[20];
int number;
while((number=fis.read(b))!=-1){
fos.write(b, 0, number);
//flush 你也可以在这里用。但一般不提倡
//将数据先存入缓冲区有利于提高效率
//不过,有时是必要的。
}
fos.flush();//这里,是指将所有的数据,全部写入输出流"2.pdf"
fis.close();
fos.close();
}catch(ioexception e){}
}
}
//当然,对于bytearrayoutputstream来说,它的目标是一个数组,将数据写入
//这个数组。当然,最后可以一次性写入一个输出流(用writeto方法)。那么
//它的过程是:自主地将数据先写入数组,再全部写入某个输出流。那么,flush
//貌似没有意义了。因为,对于写入内存数组来说,不可能再先缓存进某个
//缓冲区(那样没什么意义)。而bytearrayoutputstream的预期目标肯定是
//在创建对象时隐式生成的数组缓冲区,而不可能是writeto的对象(因为这个
//对象是可变的,只有在写入时才指定)。所以,俺认为flush对于
//bytearrayoutputstream来说,没有意义
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯