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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜成龙 中级黑马   /  2013-9-28 15:46  /  1435 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜成龙 于 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);为什么还是能复制出正确的图片呢?


3 个回复

倒序浏览
骚年,这可不是代码问题!

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

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

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

copy的图片的字节数大于原图片
但复制中图片的编码形式没有改变,只是结尾多了一些为0的字节数。
并不影响图片的浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马