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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程序爱好者 中级黑马   /  2014-4-28 14:06  /  1296 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 程序爱好者 于 2014-4-29 07:55 编辑
  1. import java.io.*;
  2. import java.util.*;
  3. public class SequenceDemo {
  4.         public static void main(String[] args)throws IOException
  5.         {
  6.                 Vector<FileInputStream> v=new Vector<FileInputStream>(); [color=Red]//这里为什么用Vector不用ArrayList[/color]
  7.                 v.add(new FileInputStream("1.txt"));       [color=Red] //这里为什么用FileInputStream,把上面的一起该成FileReader可以吗[/color]
  8.                 v.add(new FileInputStream("2.txt"));
  9.                 v.add(new FileInputStream("3.txt"));        
  10.                 Enumeration<FileInputStream> en=v.elements();   [color=Red]//这句是上面意思[/color]
  11.                 SequenceInputStream sis=new SequenceInputStream(en);
  12.                 FileOutputStream fos=new FileOutputStream("4.txt");
  13.                 byte[] buf=new byte[1024];
  14.                 int len=0;
  15.                 while((len=sis.read(buf))!=-1)
  16.                 {
  17.                         fos.write(buf,0,len);
  18.                 }
  19.                 fos.close();
  20.                 sis.close();
  21.         }
  22. }
复制代码

上面是毕老师代码,自己看不懂,求热心的同学给我讲讲

点评

视频.第一次不懂,慢慢来.没有一次就能吸引这些知识的  发表于 2014-4-28 15:16

4 个回复

倒序浏览
import java.io.*;
import java.util.*;
public class SequenceDemo {
        public static void main(String[] args)throws IOException
        {
                                /*
                                        SequenceInputStream的构造函数:SequenceInputStream(Enumeration<? entends InputStream> e),这个构造函数接收的参数类型是Enumeration。
                                        该Enumeration<? extends InputStream> :类型参数(一对尖括号里的东西)是InputStream或其子类型,FileInputStream的父类是InputStream。
                                        Vector集合是老版本的,它的迭代器是Enumeration。
                                        SequenceInputStream 构造函数要接收一个Enumeration类型的参数,而使用Enumeration进行迭代的正好是集合Vector。而泛型Enumeration的类型参数是
                                        InputStream或其子类,那么泛型Vector的类型参数就是InputStream或其子类。所以这里要使用FileInputStream,不能用FileReader(字符流)。
                               
                                */
                                //可以使用ArrayList集合,不过要自己实现Enumeration,见下面代码。如果不想自己实现Enumeration接口,那么可以使用Collections工具类:Enumeration()方法。
                Vector<FileInputStream> v=new Vector<FileInputStream>(); //这里为什么用Vector不用ArrayList
                                //这个跟Enumeration的类型参数要一致
                v.add(new FileInputStream("1.txt"));       //这里为什么用FileInputStream,把上面的一起该成FileReader可以吗
                v.add(new FileInputStream("2.txt"));
                v.add(new FileInputStream("3.txt"));
                                //定义一个迭代器,Iterator it  = obj.iterator();与它功能相似
                Enumeration<FileInputStream> en=v.elements();   //这句是上面意思
                SequenceInputStream sis=new SequenceInputStream(en);
                FileOutputStream fos=new FileOutputStream("4.txt");
                byte[] buf=new byte[1024];
                int len=0;
                while((len=sis.read(buf))!=-1)
                {
                        fos.write(buf,0,len);
                }
                fos.close();
                sis.close();
        }
}

//使用ArrayList集合

        ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
                //定义iterator迭代器
                Iterator<String> it = fileName.iterator();
                //遍历集合元素,将存有文件地址的集合元素存进接收FileInputStream类型的集合中
                while(it.hasNext())
                        al.add(new FileInputStream(it.next()));
               
                //创建实现Enumeration接口的对象
                final Iterator<FileInputStream> it1 = al.iterator();

                Enumeration<FileInputStream> en = new Enumeration<FileInputStream>(){
                        public boolean hasMoreElements(){
                                return it1.hasNext();
                        }
                        public FileInputStream nextElement(){
                                return it1.next();
                        }
                };
回复 使用道具 举报 1 0
wconho 发表于 2014-4-28 15:35
import java.io.*;
import java.util.*;
public class SequenceDemo {

看了你的分析懂了不少  
对这句还是不了解    Enumeration<FileInputStream> en=v.elements(); 有更详细的吗
我好像看之前毕老师的视频都没见过这句
回复 使用道具 举报
Vector集合在内部实现了接口Enumeration.对外提供elements()方法,用于生成Enumeration对象引用。你可以看下JDK API文档 中的Vector集合类和Enumeration接口。其实它跟Iterator迭代器原理相似,都是用于迭代集合元素的,只不过使用Enumeration的过时了,现在都在使用Iterator。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马