黑马程序员技术交流社区

标题: 切割文件与合并流 [打印本页]

作者: 丁岩    时间: 2012-9-26 07:35
标题: 切割文件与合并流
我用切割文件,把一个图片切成了很多part,在合并这些part的时候
看了一眼毕老师的代码
  1. package days16;
  2. import java.io.*;
  3. import java.util.*;
  4. public class Spilt2
  5. {
  6. public static void main(String[]args) throws FileNotFoundException, IOException
  7. {
  8. ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();

  9. for(int x=1; x<=49333; x++)
  10. {
  11. al.add(new FileInputStream("D:\\split\\"+x+".part"));
  12. }

  13. final Iterator<FileInputStream> it = al.iterator();

  14. Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
  15. {
  16. public boolean hasMoreElements()
  17. {
  18. return it.hasNext();
  19. }
  20. public FileInputStream nextElement()
  21. {
  22. return it.next();
  23. }
  24. };

  25. SequenceInputStream sis = new SequenceInputStream(en);


  26. FileOutputStream fos = new FileOutputStream("d:\\修.gif");

  27. byte[] buf = new byte[1024];

  28. int len = 0;

  29. while((len=sis.read(buf))!=-1)
  30. {
  31. fos.write(buf,0,len);
  32. }

  33. fos.close();
  34. sis.close();
  35. }
  36. }
复制代码
其中这段没看懂是为什么,希望有人帮我解释一下。。。
  1. final Iterator<FileInputStream> it = al.iterator();

  2. Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
  3. {
  4. public boolean hasMoreElements()
  5. {
  6. return it.hasNext();
  7. }
  8. public FileInputStream nextElement()
  9. {
  10. return it.next();
  11. }
  12. };
复制代码
而且我为啥将打碎的图片的part,合并成一个新的图片,新的图片为什么已经破坏了。图片格式是从[.gif=>.gif]



作者: 柳彬    时间: 2012-9-26 08:19
这段代码简单啊,是为了SequenceInputStream的实例化传入一个.Enumeration类型的参数。
而编写的,为了得到Enumeration对象,只要复写.Enumeration的方法hasMoreElements(),
FileInputStream nextElement(),这里使用.ArrayList的迭代器来返回两方法需要返回的值,这样就能发挥SequenceInputStream的作用了
作者: 尤洋    时间: 2012-9-26 08:56
这里其实就是 collections工具类中获取枚举方法enumeration()的原理。
熟悉后,完全可以直接
Enumeration<FileInputStream>en=Collections.enumeration(al);一步到位




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