SequenceInputStream类允许连接多个InputStream对象。SequenceInputStream对象的构造与其他所有InputStream对象都不同。SequenceInputStream构造函数使用一对InputStream对象或InputStream对象的一个Enumeration对象作为参数:
SequenceInputStream(InputStream first,InputStream second)
SequenceInputStream(Enumeration <? extends InputStream> streamEnum)
在操作上,该类从第1个InputStream对象进行读取,直到读取完全部内容,然后切换到第2个InputStream对象。对于使用Enumeration对象的情况,该类将持续读取所有InputStream对象中的内容,直到到达最后一个InputStream对象的末尾为止。当到达每个文件的末尾时,与之关联的流就会被关闭。关闭通过SequenceInputStream创建的流,会导致关闭所有未关闭的流。
我们来看看下面的示例一:
package io;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
public class SequenceInputStreamDemo1 {
public static void main(String[] args) {
ByteArrayInputStream ba1 = new ByteArrayInputStream("12345".getBytes());
ByteArrayInputStream ba2 = new ByteArrayInputStream("67890".getBytes());
try(SequenceInputStream stream = new SequenceInputStream(ba1, ba2)){
int n;
while((n = stream.read()) != -1){
System.out.print((char)n);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
示例2:
package io;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;
public class SequenceInputStreamDemo1 {
public static void main(String[] args) {
ByteArrayInputStream ba1 = new ByteArrayInputStream("12345".getBytes());
ByteArrayInputStream ba2 = new ByteArrayInputStream("67890".getBytes());
ByteArrayInputStream ba3 = new ByteArrayInputStream("abcde".getBytes());
ByteArrayInputStream ba4 = new ByteArrayInputStream("fghij".getBytes());
Vector<ByteArrayInputStream> v = new Vector<ByteArrayInputStream>();
v.addElement(ba1);
v.addElement(ba2);
v.addElement(ba3);
v.addElement(ba4);
try(SequenceInputStream stream = new SequenceInputStream(v.elements())){
int n;
while((n = stream.read()) != -1){
System.out.print((char)n);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
class InputStreamEnumerator implements Enumeration<ByteArrayInputStream>{
private Enumeration<ByteArrayInputStream> enums;
public InputStreamEnumerator(Vector<ByteArrayInputStream> li){
this.enums = li.elements();
}
@Override
public boolean hasMoreElements() {
return this.enums.hasMoreElements();
}
@Override
public ByteArrayInputStream nextElement() {
return this.enums.nextElement();
}
}