SequenceInputStream

来源:互联网 发布:nba2k17帅哥捏脸数据 编辑:程序博客网 时间:2024/05/22 10:23

SequenceInputStream 序列流
将多个流以集合的方式合并到一个流中
需求:
将1.txt,2.txt,3.txt中的一个数据合并到一个文件中
效率比较低的方法:

private static void lowMethod() throws  IOException {        Vector<FileInputStream> v =new Vector<FileInputStream>();        v.add(new FileInputStream("1.txt"));        v.add(new FileInputStream("2.txt"));        v.add(new FileInputStream("3.txt"));        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();//关闭集合中的所有流    }

快速的方法:

public static void beautifulMethod() throws IOException{        ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();        al.add(new FileInputStream("1.txt"));        al.add(new FileInputStream("2.txt"));        al.add(new FileInputStream("3.txt"));        Enumeration<FileInputStream> en=Collections.enumeration(al);        SequenceInputStream sis =new SequenceInputStream(en);        FileOutputStream fos=new FileOutputStream("6.txt");        byte[] buf=new byte[1024];        int len=0;        while((len=sis.read(buf))!=-1){            fos.write(buf,0,len);            }        fos.close();        sis.close();//关闭集合中的所有流    }

内部实现演示:

    public static void fastmethod() throws IOException{        ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();        al.add(new FileInputStream("1.txt"));        al.add(new FileInputStream("2.txt"));        al.add(new FileInputStream("3.txt"));        final Iterator<FileInputStream> it=al.iterator();        Enumeration<FileInputStream> en=new Enumeration<FileInputStream>(){            @Override            public boolean hasMoreElements() {                return it.hasNext();            }            @Override            public FileInputStream nextElement() {                return it.next();            }        };        SequenceInputStream sis =new SequenceInputStream(en);        FileOutputStream fos=new FileOutputStream("5.txt");        byte[] buf=new byte[1024];        int len=0;        while((len=sis.read(buf))!=-1){            fos.write(buf,0,len);            }        fos.close();        sis.close();//关闭集合中的所有流     }
原创粉丝点击