java ByteArrayOutputStream flush
我把一个Object经过留转换最终通过ByteArrayOutputStream的toByteArray写到了一个字节数组里然后FLUSH掉,第一次通过了没问题,当继续循...
我把一个Object经过留转换最终通过ByteArrayOutputStream 的toByteArray写到了一个字节数组里然后FLUSH掉,第一次通过了没问题,当继续循环写入其他Oject时发现这次写入数组的内容残留了上一次的内容,按照理解FLUSH是应该把上次的内容冲刷掉的,我DEBUG看了下也像是冲刷掉的,但下次写入内容时他就是给你残留上一次的内容出来,头疼死了,这是不是BUG?有没高人指点解决之法?
展开
1个回答
展开全部
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来说,没有意义
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来说,没有意义
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询