黑马程序员技术交流社区
标题:
关于BufferedInputStream和BufferedOutputStream读写图片的问题
[打印本页]
作者:
王春蕾
时间:
2014-4-22 15:57
标题:
关于BufferedInputStream和BufferedOutputStream读写图片的问题
本帖最后由 王春蕾 于 2014-4-22 16:01 编辑
我自定义了一个读取和写入图片文件的函数,代码如下:
public static void copyPic2() throws IOException {
FileInputStream fis = new FileInputStream("temp\\a.png");
FileOutputStream fos = new FileOutputStream("temp\\aa.jpg");
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
int len=0;
byte[] buf=new byte[1024];
while((len=bis.read(buf))!=-1)
{
bos.write(buf,0,len);
}
}
复制代码
要读取的图片是这样的:
a.png
(130.58 KB, 下载次数: 39)
下载附件
2014-4-22 15:58 上传
E:\work\IOProj\temp\a.png
运行结果却是这样的:
aa.jpg
(128 KB, 下载次数: 45)
下载附件
2014-4-22 15:59 上传
PS:上传的图片看不清楚,图片的下面少了几行像素(=_=考验亲们眼力劲的时候到了!),在我的电脑上显示的是下面一部分是黑色的背景
E:\work\IOProj\temp\aa.png
请问是怎么回事啊??
作者:
yanzhendong
时间:
2014-4-22 16:31
没有刷新,少的那一点就是最后一个缓冲区中的数据
public static void copyPic2() throws IOException {
FileInputStream fis = new FileInputStream("temp\\a.png");
FileOutputStream fos = new FileOutputStream("temp\\aa.jpg");
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
int len=0;
byte[] buf=new byte[1024];
while((len=bis.read(buf))!=-1)
{
bos.write(buf,0,len);
}
/*while循环完以后要刷新一下,否则还有一部分数据在输出流缓冲区中:*/
bos.flush();
}
复制代码
作者:
今生无憾
时间:
2014-4-22 16:38
flush一下输出流管道试试~~ ,显示图片,建立好缓冲区,读取图片完成后,一下子显示出来即 flush.
作者:
流年飞逝
时间:
2014-4-22 21:32
楼主最好有一个好习惯,就是打开了流,一定要关闭流!如果你关闭流了,也不会出现缺少像素的问题!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2