序列流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();
}
}
版權聲明:歡迎轉載,歡迎擴散,但轉載時請標明作者以及原文出處,謝謝合作! ↓↓↓