[Java] 입력 스트림(Input Stream)과 출력 스트림(Output Stream)

 데이터 입출력 

프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번하게 일어납니다. 데이터는 사용자로부터 키보드, 마우스 등을 통해 입력될 수도 있고, 파일 또는 네트워크를 통해 입력될 수도 있습니다. 또 반대로 데이터를 사용자에게 모니터나 파일등으로 출력할수도 있습니다.

 

자바 입출력과 스트림(Stream)

자바에서 데이터는 스트림(Stream)을 통해 입출력 됩니다. 스트림은 단일 방향으로 연속적으로 흘러가는 것을 말하는데 물이 높은 곳에서 낮은곳으로 흐르듯이 데이터는 출발지에서 나와 도착지로 흘러간다는 개념입니다.

 

프로그램이 출발지냐 또는 도착지냐에 따라서 스트림의 종류가 결정되는데, 프로그램이 데이터를 입력받을 때에는 입력(InputStream)이라고 부릅니다. 입력스트림의 출발지는 키보드, 파일, 네트워크상의 프로그램이 될 수 있고, 출력 스트림의 도착지는 모니터, 파일, 네트워크상의 프로그램이 될수 있습니다.

자바 입출력 스트림

 

프로그램끼리의 데이터 입출력

항상 프로그램을 기준으로 데이터가 들어오면 입력스트림이고 데이터가 나가면 출력스트림이라고 생각하시면 됩니다. 프로그램이 네트워크상의 다른 프로그램과 데이터를 교환을 하기 위해서는 양쪽 모두 입력 스트림과 출력스트림이 따로 필요합니다. 스트림은 단방향 통신을 한다는 특징이 있으므로 하나의 스트림으로 입출력을 동시에 할 수 없기 때문입니다.

프로그램 입출력

 

Java.io 패키지

자바의 기본적인 데이터 입출력은 Java.io 패키지에서 제공합니다. java.io 패키지에서는 파일 시스템의 정보를 얻기 위한 File클래스와 데이터를 입출력하기 위한 다양한 입출력 스트림 클래스를 제공합니다.

 Java.io 패키지의 주요 클래스 설명 
 File  파일 시스템의 파일 정보를 얻기 위한 클래스 
 Console   콘솔로부터 문자를 입출력하기 위한 클래스 
 InputStream / OutputStream  바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스 
 FileInputStream / FileOuputStream  바이트 단위 입출력을 위한 하위 스트림 클래스
 DataInputStream / DataOutputStream
 ObjectInputStream / ObjectOutputStream
 PrintStream
 BufferedInputStream / BufferedOutputStream
 Reader / Writer  문자 단위 입출력을 위한 최상위 입출력 스트림 클래스
 FileReader / FileWriter  문자 단위 입출력을 위한 하위 스트림 클래스
 InputStreamReader / OutputStreamWriter
 PrintWriter
 BufferedReader / BufferedWriter

바이트 단위 입출력 스트림 : 그림, 멀티미디어, 문자등 모든 종류의 데이터들을 주고받을 수 있습니다.

문자 단위 입출력 스트림 : 오로지 문자만 주고받을 수 있게 특화되어 있습니다.

 

InputStream

inputStream

InputStream은 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스입니다. 모든 바이트 기반 입력 스트림은 이 클래스를 상속받아서 만들어 집니다. InputStream 클래스에는 바이트 기반 입력 스트림이 기본적으로 가져야 할 메소드들이 정의 되어 있습니다.

 

 메서드 설명 
 read() 입력 스트림으로부터 1바이트를 읽고 읽은 바이트를 리턴합니다. 
 read(byte[ ] b)  입력 스트림으로부터 읽은 바이트들을 매개값으로 주어진 바이트 배열b에 저장하고 실제로 읽은 바이트 수를 리턴합니다.
 read(byte[] b, int off, int len) 입력 스트림으로부터 len개의 바이트만큼 읽고 매개값으로 주어진 바이트 배열 b[off]부터 len개까지 저장합니다. 그리고 실제로 읽은 바이트 수인 len개를 리턴합니다. 만약 len개를 모두 읽지 못하면 실제로 읽은 바이트 수를 리턴합니다. 
 close() 사용한 시스템 자원을 반납하고 입력스트림을 닫습니다. 

 

OutputStream

outputStream

OutputStream은 바이트 기반 출력 스트림의 최상위 클래스로 추상클래스입니다. 모든 바이트 기반 출력 스트림 클래스는 이 클래스를 상속받아서 만들어집니다. OutputStream 클래스에는 모든 바이트 기반 출력 스트림이 기본적으로 가져야 할 메소드가 정의되어 있습니다.

 

 메서드 설명 
 write(int b)  출력 스트림으로부터 1바이트를 보냅니다.(b의 끝 1바이트) 
 write(byte[ ] b)  출력 스트림으로부터 주어진 바이트 배열 b의 모든 바이트를 보냅니다.
 write(byte[ ] b, int off, int len)  출력 스트림으로 주어진 바이트 배열 b[off]부터 len개까지의 바이트를 보냅니다. 
 flush()   버퍼에 잔류하는 모든 바이트를 출력합니다. 
 close()  사용한 시스템 자원을 반납하고 출력 스트림을 닫습니다. 

 

댓글

Designed by JB FACTORY