개인참고자료/자바(네트워크)

바이트 기반 스트림 - 바이트 단위 IO 클래스, InputStream과 OutputStream

경진 2008. 7. 13. 16:40
바이트 단위 IO 클래스

바이트 단위 IO 클래스는 가장 기본이 되는 IO 클래스다.
컴퓨터에 존재하는 모든 데이터는 바이트 단위로 구성되어 있기 때문이다. 바이트 스트림 클래스는 모두 추상 클래스(abstractclass)인 InputStream과 OutputSream의 자식(하위) 클래스다. 이는 입력과 관련된 모든 바이트 스트림은 InputStream에 있는 메소드를 포함하며, 출려과 관련된 모든 바이트 스트림은 OutputStream에 있는 메소드를 포함한다.

InputStream과 OutputStream

InputStream과 OutputStream은 모든 바이트 스트림의 최상위 클래스다.
InputStream과 OutputStream 클래스는 추상클래스로서, 바이트 단위로 입출력하기 위한 가장 기본적인 메소드가 있다.

InputStream의 중요 메소드

메소드 설명
int available()
throws IOException
현재 읽을 수 있는 바이트 수를 반환한다.
void close()
throws IOException
입력 스트림을 닫는다.
int read()
throws IOException
입력 스트림에서 한 바이트를 읽어 int 값으로 반환한다.
더 이상 읽어 들여할 경우 내용이 없을 경우, -1을 반환한다.
int read(byte buf[])
throws IOException
입력 스트림에서 buf[] 크기만큼을 읽어 buf에 저장하고, 읽은 바이트 수를 반환한다. 더 이상 읽어 들여야 할 내용이 없을 경우, -1을 반환한다.
int skip(long numBytes)
throws IOException
numBytes로 지정된 바이트를 무시하고, 무시된 바이트 수를 반환한다.

InputStream은 바이트 단위로 입력 받기 위한 클래스라고 했다. 그런데 위에서 보면 read() 메소드를 통해 byte형을 반환하는 것이 아니라 int형을 반환하는 것을 알 수 있다. 그 이유는 byte형으로 반환할 경우, 파일 끝을 나타내는 기호로 사용할 마당한 값이 없기 때문이다.

이런 이유로 -1을 반환할 수 있는 int형을 사용하게 된다. 따라서 read() 메소드는 정수 하위 8비트에 실제로 읽어들인 값을 채워서 반환하게 된다.

OutputStream의 중요 메소드

메소드 설명
void close() throws IOException 출력 스트림을 닫는다.
void flush() throws IOException 버퍼에 남은 출력 스트림을 출력한다.
void write(int i) throws IOException 정수 i의 하위 8비트를 출력한다.
void write(byte buf[]) throws IOException buf 배열의 내용을 출력한다.
void write(byte buf[], int index, int size)
throws IOException
buf 배열의 index위치부터 size만큼의 바이트를 출력한다.

InputStream과 OutputStream은 추상클래스라고 했다. InputStream과 OutputStream은 new 연산자를 이용해서 객체화 시킬 수 없다. 즉, 아래와 같은 코드는 사용할 수 없다.

InputStream in = new InputStream();

따라서 InputStream 클래스는 다음과 같은 형태로만 사용할 수 있다.

InputStream in = new InputStream 클래스를 상속 받는 클래스의 생성자();