序列流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();
}
}
版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作! ↓↓↓