입출력 스트림

수호천사임다·2024년 10월 11일

자바

목록 보기
5/15

입출력(Input/Ouput) 스트림이란?

  • 자바의 모든 데이터 입출력은 스트림(Stream)이라는 개념에 의해 이루어진다.
  • 스트림은 응용프로그램과 입출력 장치를 연결하는 소프트웨어 모듈로서, 입출력 장치와 응용프로그램 사이에서 데이터가 순서대로 전송되도록 한다.
  • 데이터 입출력 시 모든 데이터를 형태와는 관계 없이 일련 된 흐름으로 전송을 하는 것이 스트림 입출력 모델의 기본 개념이다.

입출력 스트림 종류

  • 바이트 스트림: 1byte 단위로 입출력을 수행하며, 기본 입출력 단위
  • 문자 스트림: 2byte 문자 단위로 입출력을 수행

입출력 스트림의 특징

  • 스트림에는 입력 스트림과 출력 스트림이 있다.
  • 스트림은 FIFO 구조이며 단방향
  • 스트림은 지연(blocking)될 수 있다.

주요 입출력 예외 클래스

  • IOException: 입출력 처리 중 예외가 발생할 때 IOException이 발생하며, 대부분 입출력관련 예외 클래스의 상위 클래스
  • FileNotFountException : 지정된 경로에 파일이 존재하지 않는 경우 발생하는 예외
  • EOFException: 입력 도중 예기치 않게 파일이 끝나 스트림 종료에 도달했음을 알리는 예외로, 주로 데이터 입력 스트림의 종료를 알리기 위해 사용

표준 입출력 스트림

System.in

  • 표준 입력 스트림으로, 열려 있어 바로 사용 가능하다.

System.out

  • 표준 출력 스트림으로, 열려 있어 바로 사용 가능하다.

System.err

  • 표준 에러 출력 스트림으로, 열려 있어 바로 사용 가능하다

바이트 스트림

  • 스트림의 기본 입출력 단위는 바이트이다.
  • 1바이트 단위로 입출력을 수행.
  • 2진 데이터의 입출력이 가능하다.
  • 모든 바이터 스트림 클래스는 InputStream 및 OutputStream 클래스의 서브 클래스.

주요 바이트 스트림 클래스 계층도

문자 스트림

  • 2바이트 유니코드 문자를 입출력 하기 위한 스트림
  • 문자 단위로 입출력을 수행
  • 모든 문자 스트림 클래스는 Reader 및 Writer 클래스의 서브 클래스.

Bridge Stream

  • 1byte stream을 2byte stream으로 변환해주는 stream 이다.
  • Bridge Stream에서는 InputStreamReader와 OutputStreamWriter 클래스가 있다.

주요 문자 스트림 클래스 계층도

InputStream

  • 추상 클래스로, 모든 바이트 입력 스트림 클래스의 최상위 클래스.

주요 메서드

메서드설명반환 값
int read()입력 스트림에서 1바이트를 읽고 이를 반환합니다. 파일 끝에 도달하면 -1을 반환.읽은 바이트 (0~255), 파일 끝에 도달하면 -1
int read(byte[] b)입력 스트림에서 바이트 배열만큼 데이터를 읽고, 읽은 바이트 수를 반환.읽은 바이트 수 (읽을 데이터가 없으면 -1)
int read(byte[] b, int off, int len)입력 스트림에서 len만큼의 데이터를 읽어 배열 boff 오프셋 위치부터 저장한다.읽은 바이트 수 (읽을 데이터가 없으면 -1)
long skip(long n)입력 스트림에서 지정된 바이트 수만큼 건너뛴다.건너뛴 바이트 수
int available()입력 스트림에서 읽을 수 있는 바이트 수를 반환한다.읽을 수 있는 바이트 수
void close()스트림을 닫고 리소스를 해제합니다.N/A
void mark(int readlimit)현재 위치를 마크하여 reset()을 호출하면 마크된 위치로 돌아갈 수 있게 한다..N/A
void reset()이전에 mark()가 호출된 지점으로 다시 돌아간다.N/A
boolean markSupported()스트림에서 mark()reset() 메서드를 지원하는지 확인.true 또는 false

OutputStream

  • 추상 클래스로 모든 바이트 출력 스트림의 최상위 클래스.

주요 메서드

메서드설명반환 값
void write(int b)출력 스트림에 1바이트를 기록한다.N/A
void write(byte[] b)바이트 배열의 모든 바이트를 출력 스트림에 기록한다.N/A
void write(byte[] b, int off, int len)바이트 배열 boff 오프셋부터 len 길이만큼의 데이터를 출력 스트림에 기록한다.N/A
void flush()출력 스트림을 비워 버퍼의 데이터를 강제로 출력한다.N/A
void close()출력 스트림을 닫고 리소스를 해제한다.N/A

Reader 클래스

  • 문자 입력을 위한 추상클래스로, 모든 문자 입력 스트림의 최상위 클래스

주요 메서드

메서드설명반환 값
int read()입력 스트림에서 단일 문자를 읽고 이를 반환합니다. 파일 끝에 도달하면 -1을 반환한다.읽은 문자 (유니코드 값), 파일 끝에 도달하면 -1
int read(char[] cbuf)입력 스트림에서 cbuf 배열에 데이터를 저장하고, 읽은 문자 수를 반환한다.읽은 문자 수 (읽을 데이터가 없으면 -1)
int read(char[] cbuf, int off, int len)cbuf 배열의 off 위치부터 len 길이만큼 데이터를 읽어 저장한다.읽은 문자 수 (읽을 데이터가 없으면 -1)
long skip(long n)입력 스트림에서 지정된 문자 수만큼 건너뛴다.건너뛴 문자 수
boolean ready()스트림이 읽을 준비가 되었는지 확인한다.true 또는 false
boolean markSupported()스트림이 mark()reset()을 지원하는지 확인한다.true 또는 false
void mark(int readAheadLimit)현재 위치를 마크하여 reset() 호출 시 해당 위치로 돌아갈 수 있다.N/A
void reset()이전에 mark()로 지정된 위치로 다시 돌아간다.N/A
void close()스트림을 닫고 리소스를 해제한다.N/A

InputStreamReader 클래스

  • 바이트 stream 으로부터 문자 stream 문자 stream과 중개의 역할을 해서 바이트 데이터를 읽어 들여
    | 메서드 | 설명 | 반환 값 |
    | --- | --- | --- |
    | int read() | 입력 스트림에서 단일 문자를 읽고 이를 반환합니다. 파일 끝에 도달하면 -1을 반환한다. | 읽은 문자 (유니코드 값), 파일 끝에 도달하면 -1 |
    | int read(char[] cbuf) | 입력 스트림에서 cbuf 배열에 데이터를 저장하고, 읽은 문자 수를 반환한다. | 읽은 문자 수 (읽을 데이터가 없으면 -1) |
    | int read(char[] cbuf, int off, int len) | cbuf 배열의 off 위치부터 len 길이만큼 데이터를 읽어 저장한다. | 읽은 문자 수 (읽을 데이터가 없으면 -1) |
    | boolean ready() | 스트림이 읽을 준비가 되었는지 확인한다. | true 또는 false |
    | void close() | 스트림을 닫고 리소스를 해제한다. | N/A |
    | String getEncoding() | 현재 사용 중인 문자 인코딩을 반환. | 사용 중인 인코딩 (UTF-8, UTF-16, 등) |

Writer 클래스

  • 문자 출력을 추상클래스로, 모든 문자 출력 스트림의 최상위 클래스

주요 메서드

메서드설명반환 값
void write(int c)출력 스트림에 단일 문자를 기록한다.N/A
void write(char[] cbuf)문자 배열의 모든 문자를 출력 스트림에 기록한다.N/A
void write(char[] cbuf, int off, int len)문자 배열 cbufoff 위치부터 len 길이만큼의 데이터를 출력 스트림에 기록한다.N/A
void write(String str)문자열을 출력 스트림에 기록한다.N/A
void write(String str, int off, int len)문자열 stroff 위치부터 len 길이만큼의 데이터를 출력 스트림에 기록한다.N/A
void flush()출력 스트림을 비워 버퍼의 데이터를 강제로 출력한다.N/A
void close()출력 스트림을 닫고 리소스를 해제한다.N/A

OutputStreamWriter

  • 문자 출력 스트림으로 부터 바이트 출력 스트림의 중개의 역할을 담당.
  • 바이트 스트림에 기입해진 문자는, 지정된 charset를 사용해 바이트에 encode 된다.

주요 메서드

메서드설명반환 값
void write(int c)출력 스트림에 단일 문자를 기록.N/A
void write(char[] cbuf)문자 배열의 모든 문자를 출력 스트림에 기록합니다.N/A
void write(char[] cbuf, int off, int len)문자 배열 cbufoff 위치부터 len 길이만큼의 데이터를 출력 스트림에 기록.N/A
void write(String str)문자열을 출력 스트림에 기록.N/A
void write(String str, int off, int len)문자열 stroff 위치부터 len 길이만큼의 데이터를 출력 스트림에 기록.N/A
void flush()출력 스트림을 비워 버퍼의 데이터를 강제로 출력.N/A
void close()출력 스트림을 닫고 리소스를 해제.N/A
String getEncoding()현재 사용 중인 문자 인코딩을 반환.사용 중인 인코딩 (UTF-8, UTF-16, 등)

0개의 댓글