黑马程序员技术交流社区

标题: 关于使用字节流复制图片的问题 [打印本页]

作者: 杜成龙    时间: 2013-9-28 15:46
标题: 关于使用字节流复制图片的问题
本帖最后由 杜成龙 于 2013-10-1 09:30 编辑

下面的代码是使用字节流来复制一个图片:
  1. import java.io.*;
  2. class CopyDemo2
  3. {
  4. public static void main(String[] args)
  5. {
  6. FileInputStream fis=null;
  7. FileOutputStream fos=null;
  8. try
  9. {
  10. //创建读取流对象,关联要被复制的图片
  11. fis=new FileInputStream("1.jpg");
  12. //创建写入流对象,创建复制生成图片的名称
  13. fos=new FileOutputStream("1.copy_jpg");
  14. int len=0;
  15. //创建字节数组
  16. byte[] buf=new byte[1024];
  17. //向数组中读入数据并判断
  18. while((len=fis.read(buf))!=-1)
  19. {
  20. //把数组中的数据写出
  21. fos.write(buf);
  22. }
  23. }
  24. catch (IOException e)
  25. {
  26. throw new RuntimeException("复制失败");
  27. }
  28. finally
  29. {
  30. if(fis!=null)
  31. try
  32. {
  33. //关闭流资源
  34. fis.close();
  35. }
  36. catch (IOException e)
  37. {
  38. throw new RuntimeException("关闭失败");
  39. }
  40. if(fos!=null)
  41. try
  42. {
  43. //关闭流资源
  44. fos.close();
  45. }
  46. catch (IOException e)
  47. {
  48. throw new RuntimeException("关闭失败");
  49. }
  50. }
  51. }
  52. }
复制代码
程序中有这几行代码:
byte[] buf=new byte[1024];
//向数组中读入数据并判断
while((len=fis.read(buf))!=-1)
{
//把数组中的数据写出
fos.write(buf);
}
这里写的是fos.write(buf);而不是fos.write(buf,0,len);为什么还是能复制出正确的图片呢?



作者: 周文斌    时间: 2013-9-28 16:08
骚年,这可不是代码问题!

你说的复制成功是什么意思?
咱们说的复制成功指得是,图像显示的出来,然后大小一样。

你这样复制出来大小肯定不一样。

至于为什么能显示成功~~那是图像压缩的算法问题~~@ @
我想咱们不用讨论jpg格式无损压缩算法的容错能力吧,,
作者: 罗凯健    时间: 2013-9-28 16:50
这两张图片的大小不一样,最后一次长度没有1024的话,一样会输入1024个字节进文件。。
所以复制出来的图片要比原图大。
作者: javamov    时间: 2013-9-28 17:46
本帖最后由 javamov 于 2013-9-28 17:47 编辑

copy的图片的字节数大于原图片
但复制中图片的编码形式没有改变,只是结尾多了一些为0的字节数。
并不影响图片的浏览




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2