SequenceInputStream类容许链接多个InputStream对象。SequenceInputStream对象的构造与其余全部InputStream对象都不一样。SequenceInputStream构造函数使用一对InputStream对象或InputStream对象的一个Enumeration对象做为参数:java
SequenceInputStream(InputStream first,InputStream second) SequenceInputStream(Enumeration <? extends InputStream> streamEnum)
在操做上,该类从第1个InputStream对象进行读取,直到读取彻底部内容,而后切换到第2个InputStream对象。对于使用Enumeration对象的状况,该类将持续读取全部InputStream对象中的内容,直到到达最后一个InputStream对象的末尾为止。当到达每一个文件的末尾时,与之关联的流就会被关闭。关闭经过SequenceInputStream建立的流,会致使关闭全部未关闭的流。ide
咱们来看看下面的示例一:函数
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:this
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(); } }