SequenceInputStream

本文介绍了一种使用SequenceInputStream高效合并多个文件的方法,并对比了不同实现方式的效率。通过具体示例,展示了如何利用集合和枚举来简化流程。

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();//关闭集合中的所有流 
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值