-
Java - InputStream & OutputStreamLanguage/Java 2023. 3. 21. 16:57
InputStream & OutputStream
데이터 입출력
프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번하게 일어난다. 데이터는 사용자로부터 키보드, 마우스 등을 통해 입력될 수도 있고, 파일 또는 네트워크를 통해 입력될 수도 있다. 또 반대로 데이터를 사용자에게 모니터나 파일 등으로 출력할 수도 있다.
자바 입출력과 스트림
자바에서 데이터는 스트림을 통해 입출력된다. 스트림은 단일 방향으로 연속적으로 흘러가는 것을 말하는데 물이 높은 곳에서 낮은 곳으로 흐르듯이 데이터도 출발지에서 나와 도착지로 흘러간다는 개념이다.
프로그램이 출발지냐 또는 도착지냐에 따라서 스트림의 종류가 결정된다. 프로그램이 데이터를 입력받을 때에는 입력 스트림(InputStream)이라고 부르며, 데이터를 내보낼 때에는 출력 스트림(OutputStream)이라고 부른다. 입력 스트림의 출발지는 키보드, 파일, 네트워크 상의 프로그램이 될 수 있고, 출력 스트림의 도착지는 모니터, 파일, 네트워크 상의 프로그램이 될 수 있다.
프로그램끼리의 데이터 입출력
프로그램을 기준으로 데이터가 들어오면 입력 스트림이고 , 데이터가 나가면 출력 스트림이라고 생각하시면 된다. 프로그램이 네트워크 상의 다른 프로그램과 데이터를 교환하기 위해서는 양쪽 모두 입력 스트림과 출력 스트림이 따로 필요하다. 스트림은 단방향 통신을 한다는 특징이 있으므로, 하나의 스트림으로 입출력을 동시에 할 수 없기 때문이다.
Java.io 패키지
자바의 기본적인 데이터 입출력은 Java.io 패키지에서 제공한다. Java.io 패키지에서는 파일 시스템의 정보를 얻기 위한 File 클래스와 데이터를 입출력하기 위한 아래와 같은 다양한 입출력 스트림 클래스를 제공한다.
Java.io 패키지의 주요 클래스 설명 File 파일 시스템의 파일 정보를 얻기 위한 클래스 Console 콘솔로부터 문자를 입출력하기 위한 클래스 InputStream / OutputStream 바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스 DataInputStream / DataOutputStream 바이트 단위 입출력을 위한 하위 스트림 클래스 ObjectInputStream / ObjectOutputStream PrintStream BufferedInputStream / BufferedOutputStream Reader / Writer 문자 단위 입출력을 위한 최상위 입출력 스트림 클래스 FileReader / FileWriter 문자 단위 입출력을 위한 하위 스트림 클래스 InputStreamReader / OutStreamWriter PrintWriter BufferedReader / BufferedWriter 바이트 단위 입출력 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터들을 주고받을 수 있다.
문자 단위 입출력 스트림 : 오로지 문자만 주고받을 수 있게 특화되어 있다.
InputStream이란?
InputStream은 바이트 기반 입력 스트림의 최상위 추상 클래스이다. 모든 바이트 기반 입력 스트림은 이 클래스를 상속받는다. 파일 데이터를 읽거나 네트워크 소켓을 통해 데이터를 읽거나 키보드에서 입력한 데이터를 읽을 때 사용한다.
메서드 설명 read() 입력 스트림으로부터 1바이트를 읽고, 읽은 바이트를 반환한다. read(byte[] b) 입력 스트림으로부터 읽은 바이트들을 매개변수 배열 b에 저장하고, 실제로 읽은 바이트 수를 반환한다. read(byte[] b, int off, int len) 입력 스트림으로부터 len개의 바이트를 읽고, 매개변수 배열 b에 b[off] 부터 len개까지 저장한다. 그리고 실제 읽은 바이트 수인 len개를 반환한다. 만약, len개를 모두 읽지 못했다면 실제로 읽은 바이트 수를 반환한다. close() 사용한 시스템 자원을 반납하고 입력 스트림을 닫는다. OutputStream이란?
OutputStream은 바이트 기반 출력 스트림의 최상위 추상 클래스이다. 모든 바이트 기반 출력 스트림 클래스는 이 클래스를 상속받아서 만들어진다.
메서드 설명 write(int b) 출력 스트림으로부터 1바이트를 보낸다. read(byte[] b) 출력 스트림으로부터 주어진 바이트 배열 b의 모든 바이트를 보낸다. read(byte[] b, int off, int len) 출력 스트림으로 주어진 바이트 배열 b[off]부터 len개 까지의 바이트를 보낸다. flush() 버퍼에 잔류하는 모든 바이트를 출력한다. close() 사용한 시스템 자원을 반납하고 출력 스트림을 닫는다.
출처
ㆍ https://coding-factory.tistory.com/281
728x90'Language > Java' 카테고리의 다른 글
Java - 제네릭(Generic)의 제한 - extends, super, ? (0) 2022.12.28 Java - 제네릭(Generic)의 특성 (0) 2022.12.28 Java - 제네릭(Generic)을 사용하는 이유 (0) 2022.12.27 Java - 제네릭(Generic)이란? (0) 2022.12.27 Java - 스트림(Stream) 최종 처리 메서드의 종류와 사용 방법(3) (0) 2022.12.01