Java에서는 System 외부로부터의 Data도 다룰 수 있다. 이렇게 외부에서 내부로 또는 내부에서 외부로 이동하는 데이터의 흐름을 Stream이라고 한다.
Java.io package는 크게 Input Stream 과 Output Stream으로 나뉜다. 또한 각각 Byte 기반과 character 기반으로 분류 된다.
Input Stream 과 Output Stream은 byte 기반 최 상위 class이며 일반적으로 상속받아 특화된 File, Buffered, Data Input/Output Stream이 사용 된다.
File file = new File("c:\Temp\file.txt"); // 파일이 읽고, 쓰여질 경로를 지정하여 객체화 가능
기본적으로 Inputstream을 사용하여 가져온 내용을 읽고(Read) Outputstream을 사용하여 쓰고(Write) 사용한 스트림들을 비우고(Flush) 닫는(Close) 과정을 거친다.
이를 순서로 정리하면 다음과 같다.
보조 스트림은 주 스트림과 연결되어 추가 기능을 제공해 주는 스트림이다.
성능 향상을 위해 주로 사용한다. 전송받은 내용들을 모아서 한꺼번에 전송 할 수 있도록 해주는 임시 저장소이다.
Java의 데이터 타입을 갖는 데이터를 전송할 수 있게 한다.
최상위 객체인 Object를 다룰 수 있는 보조 스트림으로 객체, 배열, 컬렉션 등 다양한 형태가 들어갈 수 있다. 단, Class의 경우 직렬화 하지 않으면 전달되지 않는다. 또한 역직렬화를 해주어야만 한다.
다음과 같은 오류가 발생한다면 직렬화를 해주어야 한다. 오류가 발생한 해당 클래스에 implements Serializable 해주면 해결 된다.