IO流——(14) SequenceInputStream 序列流

序列流:

一、 API声明:

compact1, compact2, compact3

java.io

Class SequenceInputStream

  • All Implemented Interfaces:

    CloseableAutoCloseable


     
    public class SequenceInputStream
    extends InputStream

    A SequenceInputStream表示其他输入流的逻辑级联。 它从一个有序的输入流集合开始,从第一个读取到文件的结尾,然后从第二个文件读取,依此类推,直到最后一个输入流达到文件的结尾。

    从以下版本开始:

    JDK1.0

 二、作用示意图:

三、需求:将1.txt 2.txt 3.txt文件中的数据合并到一个文件中。

四、代码实现

public static void main(String[] args) 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();

        }

1.txt中数据。2、3 类似。

合并后的4.txt

由于Vertor是线程安全的,效率慢,所以为了提高速度,改为ArrayList。

private static void mergeFile() throws IOException {

        ArrayList<FileInputStream> al= new ArrayList<FileInputStream>();
        //添加三个文件
        for (int i=1;i<=3;i++){
            al.add(new FileInputStream(i+".txt"));
        }
        Enumeration<FileInputStream> enumeration = Collections.enumeration(al);
        SequenceInputStream sis = new SequenceInputStream(enumeration);
        FileOutputStream fos = new FileOutputStream("1234.txt");
        byte[] buf = new byte[1024];
        int len = 0;
        while((len=sis.read(buf))!=-1){
            fos.write(buf,0,len);
        }
        fos.close();
        sis.close();
    }

发布了186 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zhanshixiang/article/details/103898416