Java :: I/O :: 3.4 SequenceInputStream

김병철·2022년 9월 18일
0

Java

목록 보기
13/20

3.4 SequenceInputStream

SequenceInputStream은 여러 개의 입력스트림을 연속으로 연결해서 하나의 스트림으로부터 데이터를 읽는 것과 같이 처리할 수 있게 해준다.

SequenceInputStream은 다른 보조스트림과 달리 InputStream을 상속받아 구현되었다.

# SequenceInputStream의 생성자

  • SequenceInputStream(Enumeration e)
    -> Enumeration에 저장된 순서대로 입력스트림을 하나의 스트림으로 연결한다.

  • SequenceInputStream(InputStream s1, InputStream s2)
    -> 두 개의 입력스트림을 하나로 연결한다.

Vector에 연결할 입력스트림들을 저장해서 다음 Vector의 Enumeration elements()를 호출해서 생성자의 매개변수로 사용한다.

  • 사용 예 1 :
Vector files = new Vector();
files.add(new FileInputStream("file.001"));
files.add(new FileInputStream("file.002"));
SequenceInputStream in = new SequenceInputStream(files.elements());
  • 사용 예 2 :
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에 저장된 순서대로 입력되므로 순서에 주의해야 한다.

profile
keep going on~

0개의 댓글