序列流
SequenceInputStream
对多个流进行合并的流
可以把多个字节输入流 整合成一个 从序列流中读取数据
读取时 将从被整合的第一个流开始读...然后第二个...以此类推
直到最后一个流 返回-1为止
使用方法1 整合两个流
SequenceInputStream(InputStream s1, InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。
使用方法2 整合多个流
SequenceInputStream(Enumeration<? extends InputStream> e)
通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;
public class Demo_03 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//demo1();
//使用方法2 整合多个流
//SequenceInputStream(Enumeration<? extends InputStream> e)
//构造函数 要求传入枚举 思考如何获取枚举 发现有个集合 可以获取枚举 Vector集合
Vector<FileInputStream> v = new Vector<>();
v.add(new FileInputStream("a.txt"));
v.add(new FileInputStream("b.txt"));
v.add(new FileInputStream("c.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.flush();
}
fos.close();
sis.close();
System.out.println("success");
}
private static void demo1() throws IOException{
/*
使用方法1 整合两个流
SequenceInputStream(InputStream s1, InputStream s2)
*/
FileInputStream f1 = new FileInputStream("a.txt");
FileInputStream f2 = new FileInputStream("b.txt");
SequenceInputStream sis = new SequenceInputStream(f1,f2);
//创建输出流 对象 关联到 c.txt
FileOutputStream fos = new FileOutputStream("c.txt");
int b;
while((b = sis.read())!=-1){
fos.write(b);
}
sis.close();
fos.close();
System.out.println("success");
}
}