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(); } }