想要查看此教程的目錄請點擊:Java IO教程目錄貼地址
SequenceInputStream可以將兩個或更多個InputStream合并成一個。它會首先讀取第一個的全部字節,然后第二個。這就是叫SequenceInputStream的原因,因為它是安順序讀取的。
SequenceInputStream例子
是時候通過一個例子來看如何使用它了。在使用之前得先在類里面導入這個:
import java.io.SequenceInputStream;
下面讓我們來看一個具體的例子:
InputStream input1 = new FileInputStream("c:\\data\\file1.txt");
InputStream input2 = new FileInputStream("c:\\data\\file2.txt");
SequenceInputStream sequenceInputStream =
new SequenceInputStream(input1, input2);
int data = sequenceInputStream.read();
while(data != -1){
System.out.println(data);
data = sequenceInputStream.read();
}
例子中的java代碼首先實例化兩個InputStream。FileInputStream繼承自InputStream,所以它們可以用在sequenceInputStream中。
然后,例子創建了一個SequenceInputStream實例。利用兩個參數的構造方法,這兩個參數為InputStream類型,這就是如何合并兩個輸入流的辦法。
兩個InputStream實例可以被SequenceInputStream合并在一起就像一個連貫的流。當第二個流都被寫過之后,SequenceInputStream的read()方法就會返回 -1,就是其他的輸入流一樣。
合并更多數量的流
你可以有兩種辦法來來并不更多的流。第一種辦法就是把所有的實例放入一個Vector,然后把Vector傳給SequenceInputStream的構造方法。下面是其示例:
InputStream input1 = new FileInputStream("c:\\data\\file1.txt");
InputStream input2 = new FileInputStream("c:\\data\\file2.txt");
InputStream input3 = new FileInputStream("c:\\data\\file3.txt");
Vector<InputStream> streams = new Vector<>();
streams.add(input1);
streams.add(input2);
streams.add(input3);
SequenceInputStream sequenceInputStream =
new SequenceInputStream(streams.elements()))
int data = sequenceInputStream.read();
while(data != -1){
System.out.println(data);
data = sequenceInputStream.read();
}
sequenceInputStream.close();
第二種辦法是把InputStream合并至SequenceInputStream,再將兩個InputStream合并至另一個SequenceInputStream,最后將兩個SequenceInputStream合并到一個SequenceInputStream中:
SequenceInputStream sequenceInputStream1 =
new SequenceInputStream(input1, input2);
SequenceInputStream sequenceInputStream2 =
new SequenceInputStream(input3, input4);
SequenceInputStream sequenceInputStream =
new SequenceInputStream(
sequenceInputStream1, sequenceInputStream2)){
int data = sequenceInputStream.read();
while(data != -1){
System.out.println(data);
data = sequenceInputStream.read();
}
sequenceInputStream.close();
關閉SequenceInputStream
從SequenceInputStream讀取完數據后要記得關閉它。關閉的同時也會關閉在讀的InputStream示例。關閉只需要調用close()方法,就像下面的一樣:
sequenceInputStream.close();
在java7中你也可以用try-with-resources結構。下面代碼為如何使用此種結構來關閉流:
InputStream input1 = new FileInputStream("c:\\data\\file1.txt");
InputStream input2 = new FileInputStream("c:\\data\\file2.txt");
try(SequenceInputStream sequenceInputStream =
new SequenceInputStream(input1, input2)){
int data = sequenceInputStream.read();
while(data != -1){
System.out.println(data);
data = sequenceInputStream.read();
}
}
注意這并沒有任何顯式的調用close()方法。
也要注意FileInputStream的兩個示例并沒有放在try-with-resources代碼塊里。這意味著try-with-resources并不會自動關閉兩個FileInputStream。然而,當SequenceInputStream被關閉后它也會關閉它讀的InputStream,所以FileInputStream也會在SequenceInputStream關閉后被關閉。