java–基础–16.11–IO流–SequenceInputStream
1、介绍
SequenceInputStream extends InputStream
SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
2、构造方法:
-
SequenceInputStream(Enumeration< ? extends InputStream> e):通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
-
SequenceInputStream(InputStream s1, InputStream s2):
通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节
3、方法
- void close():关闭此输入流并释放与此流关联的所有系统资源。
- int read():从此输入流中读取下一个数据字节。
- int read(byte[] b, int off, int len):将最多 len 个数据字节从此输入流读入 byte 数组。
4、案例
// 需求:把Test.java和test.txt的内容复制到Test3.java中
InputStream s1 = new FileInputStream("Test.java");
InputStream s2 = new FileInputStream("test.txt");
SequenceInputStream sis = new SequenceInputStream(s1, s2);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Test3.java"));
byte[] bys = new byte[1024];
int len = 0;
while ((len = sis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bos.close();
sis.close();
Vector<InputStream> vector = new Vector<InputStream>();
InputStream s1 = new FileInputStream("Test.java");
InputStream s2 = new FileInputStream("Test.txt");
InputStream s3 = new FileInputStream("Test3.java");
vector.add(s1);
vector.add(s2);
vector.add(s3);
Enumeration<InputStream> enumeration = vector.elements();
//SequenceInputStream(Enumeration< ? extends InputStream> e)
//通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
SequenceInputStream sequence = new SequenceInputStream(enumeration);
//BufferedOutputStream 写操作
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("Test4.java"));
byte[] bys = new byte[1024];
int len = 0;
while ((len = sequence.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bos.close();
sequence.close();
}