SequenceInputStream은 여러 개의 입력스트림을 연속으로 연결해서 하나의 스트림으로부터 데이터를 읽는 것과 같이 처리할 수 있게 해준다.
SequenceInputStream은 다른 보조스트림과 달리 InputStream을 상속받아 구현되었다.
SequenceInputStream(Enumeration e)
-> Enumeration에 저장된 순서대로 입력스트림을 하나의 스트림으로 연결한다.
SequenceInputStream(InputStream s1, InputStream s2)
-> 두 개의 입력스트림을 하나로 연결한다.
Vector에 연결할 입력스트림들을 저장해서 다음 Vector의 Enumeration elements()를 호출해서 생성자의 매개변수로 사용한다.
Vector files = new Vector();
files.add(new FileInputStream("file.001"));
files.add(new FileInputStream("file.002"));
SequenceInputStream in = new SequenceInputStream(files.elements());
FileInputStream file1 = new FileInputStream("file.001");
FileInputStream file2 = new FileInputStream("file.002");
SequenceInputStream in = new SequenceInputStream(file1, file2);
import java.io.*;
import java.util.*;
public class Ex15_14 {
public static void main(String[] args) {
byte[] arr1 = {0, 1, 2};
byte[] arr2 = {3, 4, 5};
byte[] arr3 = {6, 7, 8};
byte[] outSrc = null;
Vector v = new Vector();
v.add(new ByteArrayInputStream(arr1));
v.add(new ByteArrayInputStream(arr2));
v.add(new ByteArrayInputStream(arr3));
SequenceInputStream input = new SequenceInputStream(v.elements());
ByteArrayOutputStream output = new ByteArrayOutputStream();
int data = 0;
try {
while((data = input.read()) != -1) {
output.write(data); // void write(int b)
}
} catch (IOException e) {
}
outSrc = output.toByteArray();
System.out.println("Input Source1 : "+Arrays.toString(arr1));
System.out.println("Input Source1 : "+Arrays.toString(arr2));
System.out.println("Input Source1 : "+Arrays.toString(arr3));
System.out.println("Output Source : "+Arrays.toString(outSrc));
}
}
Input Source1 : [0, 1, 2]
Input Source1 : [3, 4, 5]
Input Source1 : [6, 7, 8]
Output Source : [0, 1, 2, 3, 4, 5, 6, 7, 8]
3개의 ByteArrayInputStream을 Vector와 SequenceInputStream을 이용해서 하나의 입력스트림으로 다룬다.
Vector에 저장된 순서대로 입력되므로 순서에 주의해야 한다.