黑马程序员技术交流社区

标题: 关于IO流中图片拷贝(图片为什么多了1KB) [打印本页]

作者: 黑马-王鹏    时间: 2013-4-8 11:36
标题: 关于IO流中图片拷贝(图片为什么多了1KB)
本帖最后由 黑马-王鹏 于 2013-4-8 12:32 编辑
  1. //需求:从d盘复制图片到e盘
  2. import java.io.*;
  3. class CopyPicture
  4. {
  5. public static void main(String[] args)
  6. {
  7. FileOutputStream fos = null;
  8. FileInputStream fis = null;
  9. try
  10. { //创建目的文件
  11. fos = new FileOutputStream("e:\\kobe24.jpg");
  12. //创建关联文件
  13. fis = new FileInputStream("d:\\kobe.jpg");
  14. byte [] bt = new byte[1024];
  15. int len = 0;
  16. while ((len=fis.read(bt))!=-1)
  17. {
  18. fos.write(bt);
  19. }
  20. }
  21. catch (IOException e)
  22. {
  23. throw new RuntimeException("图片异常");
  24. }
  25. finally
  26. {
  27. try
  28. {
  29. if(fis!=null)
  30. fis.close();
  31. }
  32. catch (IOException e)
  33. {
  34. throw new RuntimeException("图片读取异常");
  35. }
  36. try
  37. {
  38. if(fos!=null)
  39. fos.close();
  40. }
  41. catch (IOException e)
  42. {
  43. throw new RuntimeException("图片写入异常");
  44. }
  45. }
  46. }
  47. }
复制代码
为什么图片拷贝之后会大1KB啊?

1JSC1MX[W%2(7YPVDU1Q1_P.jpg (35.58 KB, 下载次数: 83)

1JSC1MX[W%2(7YPVDU1Q1_P.jpg

7~JDQZ{A0)4[%7@5OXQ7S0C.jpg (30.11 KB, 下载次数: 87)

7~JDQZ{A0)4[%7@5OXQ7S0C.jpg

作者: 梁航斌    时间: 2013-4-8 11:47
看了一下你的代码,估计是

fos.write(bt)的问题
建议你fos.write(bt,0,len);试试。大概原因可能是最后没读慢1024的空间,空的页读进去了。改了试一下。


作者: 炉海佳    时间: 2013-4-8 12:07
byte [] bt = new byte[1024];//定义一个长度为1024的数组,也就是每次往这个数组装1024个字节就写出去

int len = 0;

while ((len=fis.read(bt))!=-1)

{

fos.write(bt);//每次都写1024个字节,但最后一次肯定不可能也刚好是1024个字节,你把空的格子也写进去了肯定多了。把它改成:
fos.write(bt,0,len);//读了多少写多少,空格子不写出去
作者: 黑马-王鹏    时间: 2013-4-8 12:30
梁航斌 发表于 2013-4-8 11:47
看了一下你的代码,估计是

fos.write(bt)的问题

嗯,就是这个原因,赞一个
作者: 黑马-王鹏    时间: 2013-4-8 12:32
炉海佳 发表于 2013-4-8 12:07
byte [] bt = new byte[1024];//定义一个长度为1024的数组,也就是每次往这个数组装1024个字节就写出去

in ...

回答的非常详细,谢了哈
作者: 冯超    时间: 2013-4-8 12:50
楼上的 已经回答了····{:soso_e127:}




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