[자바(Java)] 입출력 스트림 (I/O Stream)

방용환·2023년 4월 25일
0
post-thumbnail

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 클래스를 최상위 클래스로 관계가 설정된 클래스

2. InputStream

  • System.in : Java 프로그램 개발을 위해 기본적으로 제공되는 키보드 입력스트림이 저장된 필드
    => InputStream 클래스를 기반으로 제공되는 입력스트림 (객체)
    => 키보드를 누르면 키보드의 문자값이 입력스트림으로 전달
  • InputStream.read() : 입력스트림에 존재하는 값을 원시데이터(1Byte)로 읽어 정수값으로 반환하는 메소드
    => 입력스트림에 값이 없는 경우 스레드는 일시 중지 상태로 전환
    => 입력스트림에 엔터가 입력될 경우 스레드 다시 실행

1. BufferedInputStream 클래스

  • BufferedInputStream 클래스 : InputStream 객체를 전달받아 대량의 원시데이터를 읽기 위한 입력스트림을 생성하기 위한 클래스

2. DataInputStream 클래스

  • 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 클래스보다 많은 출력메소드 제공

0개의 댓글