黑马程序员技术交流社区

标题: 使用SequenceInputStream将切割后文件合并程序的疑问 [打印本页]

作者: 刘元明    时间: 2012-3-22 15:38
标题: 使用SequenceInputStream将切割后文件合并程序的疑问
程序如下:
public static void merge()
{
      ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
      for(int x=1;x<=3;x++)
      {
         al.add(new FileInputStream("c:\\splits\\"+x+".part"));
      }
       /*
      final Iterator <FileInputStream> it=al.iterator();
      Enumeration<FileInputStream> en=new  Enumeration<FileInputStream> ()
      {
            public boolean hasMoreElements()
            {
                    return it.hasNext();
             }
             public FileInputStream nextElement()
             {
                    return it.next();
             }
       }
       SequenceInputStream sis=new  SequenceInputStream (en);
      */
       FileOutputStream fos =new FileOutputStream("c:\\splits\\1.bmp");
       byte[] buf=new byte[1024];
       int len=0;
       while((len=sis.read(buf))!=-1)
       {
               fos.write(buf,0,len);
        }
        fos.close();
        sis.close();
}
请问注释的部分啥思路?本来写Vector集合可以直接使用Enumeration,但考虑到低效就不用vector集合,但这样做高效体现在哪呢?
作者: 陈汉帆    时间: 2012-3-22 19:04
本帖最后由 陈汉帆 于 2012-3-22 20:09 编辑

Enumeration<FileInputStream> en=new  Enumeration<FileInputStream> ()
       {
             public boolean hasMoreElements()
             {
                     return it.hasNext();
              }
              public FileInputStream nextElement()
              {
                     return it.next();
              }
        }
这部分表示匿名内部类,对Enumeration接口重写它的hasMoreElements()和nextElement()方法以实现匿名子类实例化,
Vector是同步的,ArrayList是不同步的,所以如果是单线程时Vector会影响性能;另一方面,当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样ArrayList就有利于节约空间了




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