黑马程序员技术交流社区
标题:
关于复制图片的问题,大家看一下。。。
[打印本页]
作者:
蔡先苼
时间:
2014-5-5 22:18
标题:
关于复制图片的问题,大家看一下。。。
private static void copyPic1() throws IOException {
FileInputStream fis=new FileInputStream("temp\\0.png");
FileOutputStream fos=new FileOutputStream("temp\\1.png");
BufferedInputStream bufis=new BufferedInputStream(fis);
BufferedOutputStream bufos=new BufferedOutputStream(fos);
int by=0;
while((by=bufis.read())!=-1){
bufos.write(by);
}
fis.close();
fos.close();
}
用这种方法复制出的照片1.png相较于0.png有些不一样,且图片大小也不一样,是哪里出问题呢?为什么会出现这种问题呢?
作者:
程序爱好者
时间:
2014-5-5 22:48
private static void copyPic1() throws IOException {
FileInputStream fis=new FileInputStream("temp\\0.png");
FileOutputStream fos=new FileOutputStream("temp\\1.png");
BufferedInputStream bufis=new BufferedInputStream(fis);
BufferedOutputStream bufos=new BufferedOutputStream(fos);
int by=0;
while((by=bufis.read())!=-1){
bufos.write(by);
bufos.flush();//你忘记刷新了,这个是关键啊
}
fis.close();
fos.close();
}
复制代码
作者:
jieyu90
时间:
2014-5-5 22:51
因为你使用的是带缓冲的输入输出流,相当于为InputStream,OutputStream类增加缓冲区功能,此时读写中间都要经过缓冲区,所以在使用write()方法写入输出流时实际上是先将数据写入缓冲区中,等缓冲区写满之后再一次性写入磁盘,这就是为什么你复制后的图片损失了一部分的原因,因为最后一次写入缓冲区时没有将缓冲区写满,因此缓冲区中的那些内容也就不会写入到磁盘。
所以一般为了确保缓冲区中的数据一定被写入输出流,建议写入完成之后执行flush()将缓冲区中的数据全部写到输出流中。
你在fis.close();之前加上bufos.flush();试试
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2