java ByteArrayOutputStream flush

我把一个Object经过留转换最终通过ByteArrayOutputStream的toByteArray写到了一个字节数组里然后FLUSH掉,第一次通过了没问题,当继续循... 我把一个Object经过留转换最终通过ByteArrayOutputStream 的toByteArray写到了一个字节数组里然后FLUSH掉,第一次通过了没问题,当继续循环写入其他Oject时发现这次写入数组的内容残留了上一次的内容,按照理解FLUSH是应该把上次的内容冲刷掉的,我DEBUG看了下也像是冲刷掉的,但下次写入内容时他就是给你残留上一次的内容出来,头疼死了,这是不是BUG?有没高人指点解决之法? 展开
 我来答
真冰刀雪剑
推荐于2016-06-20 · TA获得超过679个赞
知道小有建树答主
回答量:206
采纳率:0%
帮助的人:145万
展开全部
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来说,没有意义
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式