Java攻城狮的入门课程Java学习笔记程序员

(十一)序列流

2017-03-16  本文已影响61人  黒猫

序列流SequnenceInputStream用来表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止,但序列流只能读取字节输入流。

1、使用序列流实现将多个输入流写入到同一个文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        // 先创字节输入流读取文件
        FileInputStream file1 = new FileInputStream("f:\\Demo1.java");
        FileInputStream file2 = new FileInputStream("f:\\Demo2.java");
        FileInputStream file3 = new FileInputStream("f:\\Demo3.java");
        /*
         * 根据序列流的构造方法
         * SequenceInputStream(Enumeration<? extends InputStream>e)
         * 表明要传入Enumeration类型的参数
         */
        // 将三个读取流都放到集合内
        Vector v = new Vector<>();
        v.add(file1);
        v.add(file2);
        v.add(file3);
        // 枚举
        Enumeration<FileInputStream> en = v.elements();

        // 创建序列流对象
        // 序列流会按顺序依次使用集合内的三个文件读取流读取文件
        SequenceInputStream sis = new SequenceInputStream(en);
        FileOutputStream fos = new FileOutputStream("F:\\Demo4.java");
        byte[] arr = new byte[1024];
        int len = 0;
        while ((len = sis.read(arr)) != -1) {
            fos.write(arr, 0, len);
        }
        // 关闭流
        sis.close();
        fos.close();
    }

}


2、实现上述功能的另一种枚举方法

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;

public class Demo2 {

    public static void main(String[] args) throws IOException {
        // 使用Collections工具类的方法得到枚举
        ArrayList<FileInputStream> list = new ArrayList<>();
        list.add(new FileInputStream("F:\\Demo1.java"));
        list.add(new FileInputStream("F:\\Demo2.java"));
        list.add(new FileInputStream("F:\\Demo3.java"));
        Enumeration<FileInputStream> en = Collections.enumeration(list);
        // 创建序列流对象
        // 序列流会按顺序依次使用集合内的三个文件读取流读取文件
        SequenceInputStream sis = new SequenceInputStream(en);
        FileOutputStream fos = new FileOutputStream("F:\\Demo4.java");
        byte[] arr = new byte[1024];
        int len = 0;
        while ((len = sis.read(arr)) != -1) {
            fos.write(arr, 0, len);
        }
        // 关闭流
        sis.close();
        fos.close();
    }

}

版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作!             ↓↓↓
上一篇下一篇

猜你喜欢

热点阅读