A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王春蕾 于 2014-4-22 16:01 编辑

我自定义了一个读取和写入图片文件的函数,代码如下:
  1.         public static void copyPic2() throws IOException {
  2.                
  3.                 FileInputStream fis = new FileInputStream("temp\\a.png");
  4.                 FileOutputStream fos = new FileOutputStream("temp\\aa.jpg");
  5.                
  6.                 BufferedInputStream bis=new BufferedInputStream(fis);
  7.                 BufferedOutputStream bos=new BufferedOutputStream(fos);
  8.                 int len=0;
  9.                 byte[] buf=new byte[1024];
  10.                 while((len=bis.read(buf))!=-1)
  11.                 {
  12.                         bos.write(buf,0,len);
  13.                 }
  14.         }
复制代码

要读取的图片是这样的:
E:\work\IOProj\temp\a.png
运行结果却是这样的:

PS:上传的图片看不清楚,图片的下面少了几行像素(=_=考验亲们眼力劲的时候到了!),在我的电脑上显示的是下面一部分是黑色的背景
E:\work\IOProj\temp\aa.png
请问是怎么回事啊??

点评

时刻记得需要流则不会出现这种问题!!!  发表于 2014-4-22 16:46

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

4 个回复

倒序浏览
没有刷新,少的那一点就是最后一个缓冲区中的数据
  1.         public static void copyPic2() throws IOException {
  2.                
  3.                 FileInputStream fis = new FileInputStream("temp\\a.png");
  4.                 FileOutputStream fos = new FileOutputStream("temp\\aa.jpg");
  5.                
  6.                 BufferedInputStream bis=new BufferedInputStream(fis);
  7.                 BufferedOutputStream bos=new BufferedOutputStream(fos);
  8.                 int len=0;
  9.                 byte[] buf=new byte[1024];
  10.                 while((len=bis.read(buf))!=-1)
  11.                 {
  12.                         bos.write(buf,0,len);
  13.                 }
  14. /*while循环完以后要刷新一下,否则还有一部分数据在输出流缓冲区中:*/
  15. bos.flush();
  16.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
flush一下输出流管道试试~~  ,显示图片,建立好缓冲区,读取图片完成后,一下子显示出来即 flush.
回复 使用道具 举报
楼主最好有一个好习惯,就是打开了流,一定要关闭流!如果你关闭流了,也不会出现缺少像素的问题!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马