바이트 스트림 클래스는 모두 추상 클래스(abstract class)인 InputStream과 OutputStream의 자식(하위)클래스다.입력과 관련된 모든 바이트 스트림은 InputStream에 있는 메소드를 포함하며, 출력과 관련된 모든 바이트 스트림은 OutputStream에 있는 메소드를 포함한다.
1. 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 은 추상 클래스이므로 객체를 생성할 수 없다.
System.in을 이용해서 키보드로부터 입력받기
System.in은 표준 입력을 받는다. 표준 입력이란 보통 키보드로부터의 입력을 말한다.
2. FileInputStream과 FileOutputStream
FileInputStream과 FileOutputStream은 각각 InputStream과 OutputStream을 상속받으며, 파일로부터 바이트 단위로 입력을 받고, 대상 파일에 바이트 단위로 출력할 수 있는 클래스다.
FileInputStream과 FileOutputStream의 생성자는 파일명이나 파일 정보가 있는 File 클래스에 대한 객체를 전달받는다. 그리고 FileInputStream의 경우 생성자에 전달한 파일명이 실제로 존재하지 않는 파일명이면, java.io.FileNotFoundException 을 발생시킨다.
3. DataInputStream과 DataOutputStream
DataInputStream과 DataOutputStream은 자바의 기본형 데이터인 int, float, double, boolean, short, byte 등의 정보를 입력하고 출력하는 데 알맞은 클래스다.
DataInputStream은 생성자에 InputStream을 받아들이며, DataOutputStream은 생성자에서 OutputStream을 받아들인다. 이는 다른 바이트 스트림을 통해서 읽어 들이거나 쓴다는 의미다. InputStream을 인자로 받아들인다는 것은 InputStream의 자식이나 자손클래스를 받아들인다는 것이다.
4.ByteArrayInputStream과 ByteArrayOutputStream
BtyeArrayInputStream은 말 그대로 바이트 배열을 차례대로 읽어 들이기 위한 클래스다. ByteArrayOutputStream은 내부적으로 저장공간이 있어서, ByteArrayOutputStream은 내부적인 저장 공간이 있어서, ByteArrayOutputStream에 있는 메소드를 이용해서 출력하게 되면, 출력되는 모든 내용들이 내부적인 저장 공간에 쌓이게 된다. 그 후에 ByteArrayOutputStream에 있는 toByteArray()를 실행하면 , 저장된 모든 내용이 바이트 배열로 반환된다.