(十一)序列流


序列流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();
    }

}

版權聲明:歡迎轉載,歡迎擴散,但轉載時請標明作者以及原文出處,謝謝合作!             ↓↓↓
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容