[자바(Java)] 입출력 스트림 (I/O Stream)
1. 용어 설명
1. java.io 패키지
- java.io 패키지 : 입력과 출력 관련 클래스가 선언된 패키지
2. 스트림 (Stream)
- 스트림 (Stream) :값을 전달하기 위한 목적으로 생성된 입력클래스와 출력클래스의 객체
- 원시데이터 기반의 스트림 (Byte Stream) : 가공되지 않은 원시데이터를 전달하기 위한 입출력스트림
- 문자데이터 기반의 스트림 (Character Stream) : 원시데이터를 가공처리한 문제데이터를 전달하기 위한 입출력스트림
3. IOException
- 입력스트림 또는 출력스트림 관련 메소드는 IOException 발생
- IOException은 일반 예외이므로 반드시 예외처리
2. Byte Stream
1. Byte Stream
- 원시데이터 기반의 스트림 (Byte Stream) : 가공되지 않은 원시데이터를 전달하기 위한 입출력스트림
- 값을 1Byte 단위로 입력 또는 출력하기 위한 스트림
- InputStream 클래스와 OutputStream 클래스를 최상위 클래스로 관계가 설정된 클래스
- System.in : Java 프로그램 개발을 위해 기본적으로 제공되는 키보드 입력스트림이 저장된 필드
=> InputStream 클래스를 기반으로 제공되는 입력스트림 (객체)
=> 키보드를 누르면 키보드의 문자값이 입력스트림으로 전달
- InputStream.read() : 입력스트림에 존재하는 값을 원시데이터(1Byte)로 읽어 정수값으로 반환하는 메소드
=> 입력스트림에 값이 없는 경우 스레드는 일시 중지 상태로 전환
=> 입력스트림에 엔터가 입력될 경우 스레드 다시 실행
- BufferedInputStream 클래스 : InputStream 객체를 전달받아 대량의 원시데이터를 읽기 위한 입력스트림을 생성하기 위한 클래스
- DataInputStream 클래스 : InputStream 객체를 전달받아 원시데이터를 원하는 자료형의 값으로 변환하여 제공하기 위한 기능의 입력스트림을 생성하기 위한 클래스
- DataInputStream.readInt(int v) : 입력스트림으로 원시데이터를 읽어 정수값으로 반환하는 메소드
- DataInputStream.readInt(boolean v) : 입력스트림으로 원시데이터를 읽어 논리값으로 반환하는 메소드
3. OutputStream
- System.out : Java 프로그램 개발을 위해 기본적으로 제공되는 모니터 출력스트림이 저장된 필드
=> OutputStream 클래스를 기반으로 제공되는 입력스트림 (객체)
=> 출력스트림에 값을 전달하여 모니터가 출력 처리
- OutputStream.write(int b) : 매개변수로 제공받은 값을 원시데이터(1Byte)로 출력스트림에 전달하는 메소드
1. BufferedOutputStream 클래스
- BufferedOutputStream 클래스 : OutputStream 객체를 전달받아 대량의 원시데이터를 전달하기 위한 출력스트림을 생성하기 위한 클래스
2. DataOutputStream 클래스
- DataOutputStream 클래스 : OutputStream 객체를 전달받아 원하는 자료형의 값을 원시데이터로 전달하기 위한 기능의 출력스트림을 생성하기 위한 클래스
- DataOutputStream.writeInt(int v) : 매개변수로 정수값을 전달받아 원시데이터로 변환하여 출력스트림으로 전달하는 메소드
- DataOutputStream.writeInt(boolean v) : 매개변수로 논리값을 전달받아 원시데이터로 변환하여 출력스트림으로 전달하는 메소드
3. Character Stream
1. Character Stream
- 문자데이터 기반의 스트림 (Character Stream) : 원시데이터를 가공처리한 문제데이터를 전달하기 위한 입출력스트림
- 원시데이터를 인코딩 처리하여 원하는 문자형태(캐릭터 셋 - CharSet)의 문자데이터로 변환
- 값을 2Byte 단위로 입력 또는 출력하기 위한 스트림
- Reader 클래스와 Writer 클래스를 최상위 클래스로 관계가 설정된 클래스
2. Reader 클래스
- InputStreamReader 클래스 : InputStream 객체를 전달받아 문자데이터를 입력받기 위한 입력스트림(Reader 객체)를 생성하기 위한 클래스
- Reader.read() : 입력스트림에 존재하는 값을 문자데이터(2Byte)로 읽어 정수값으로 반환하는 메소드
- BufferedReader 클래스 : Reader 객체를 전달받아 대량의 문자데이터를 입력받을 수 있는 입력스트림을 생성하기 위한 클래스
=> 입출력 관련 클래스는 스트림의 다단계 연결을 사용하여 스트림 확장 가능
- BufferedReader.readLine() : 대량의 문자데이터를 읽어 문자열로 반환하는 메소드
3. Writer 클래스
- OutputStreamWriter 클래스 : OutputStream 객체를 전달받아 문자데이터를 출력하기 위한 출력스트림(Write 객체)을 생성하기 위한 클래스
=> 스트림 확장
- Writer.write() : 매개변수로 제공받은 값을 문자데이터(2Byte)로 출력스트림에 전달하는 메소드
=> 문자데이터는 출력스트림에 존재하는 버퍼(임시 메모리)에 일정한 크기만큼 저장하고 한번에 출력스트림으로 전달하여 출력 처리
- Writer.flush() : 출력스트림의 버퍼에 존재하는 모든 값을 출력스트림으로 전달하는 메소드
- BufferedWriter 클래스 : Writer 객체를 전달받아 대량의 문자데이터를 전달하기 위한 출력스트림을 생성하기 위한 클래스
- PrintWriter 클래스 : OutputStream 객체를 전달받아 문자데이터를 출력하기 위한 출력스트림(Write 객체)을 생성하기 위한 클래스
=> Writer 클래스보다 많은 출력메소드 제공