- 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램 간 데이터를 주고 받는 것
- 자바에서는 java.io 패키지를 통해서 많은 종류의 입출력 관련 클래스들을 제공함
1. 스트림(stream)
- 자바에서 입출력을 수행(데이터 운반)에 사용되는 연결통로
- 스트림은 단방향 통신만 가능, 그러므로 입출력을 동시에 사용하기 위해서는 2개의 스트림 필요
- 스트림은 먼저 보낸 데이터를 먼저 받음(큐의 FIFO구조 같은 형태)
- 중간에 건너뜀 없이 연속적으로 데이터를 주고 받음
2. 바이트 기반 스트림
- 바이트 단위로 데이터를 전송
- 입출력 대상과 입/출력 목적에 따라 해당 스트림을 선택해서 사용
입출력 대상 | 입력 스트림 | 출력 스트림 |
파일 | FileInputStream | FileOutputStream |
메모리(byte배열) | ByteArrayInputStream | ByteOutputStream |
프로세스(프로세스 간 통신) | PipedInputStream | PipedIOutputStream |
오디오 장치 | AudioInputStream | AudioOutputStream |
1) 입력 스트림(InputStream)
메서드명 | 설명 |
int available() | 스트림으로부터 읽어 올 수 있는 데이터 크기 반환 |
void close() | 스트림을 닫고 사용하던 자원 반환 |
boolean markSupported() | - mark()와 reset() 지원 여부 반환 - mark()와 reset() 기능 지원은 선택적이므로 사용 전 확인 필수 |
void mark(int readlimit) | 현재 위치 표시, 후에 reset()에 의해 표시해 놓은 위치로 돌아갈 수 있음 |
void reset() | 스트림에서의 위치를 마지막으로 mark()가 호출되었던 위치로 되돌림 |
abstract int read() | - 1byte를 읽어옴(0~255사이의 값) - 더이상 읽어올 데이터가 없을 시 -1 반환 - abstract메서드이기 때문에 상황에 맞게 구현하여 사용해야함 |
int read(byte[] b) | - 배열 b의 크기만큼 읽어서 배열을 채우고 읽어 온 데이터 수 반환 - 반환하는 값은 항상 배열의 크기보다 작거나 같음 |
int read(byte[] b, int off, int len) | - 최대 len개의 byte를 읽어서 배열 b의 지정된 위치 off부터 저장 - 실제로 읽어 올 수 있는 데이터가 len개보다 적을 수 있음 |
long skip(long n) | 스트림에서 주어진 길이 n만큼 건너뜀 |
2) 출력 스트림(OutputStream)
메서드명 | 설명 |
void close() | 입력 소스를 닫고 사용하던 자원 반환 |
void flush() | - 스트림의 버퍼에 있는 모든 내용을 출력 소스에 씀 - 버퍼가 있는 출력 스트림 스트림만 해당 |
abstract void write(int b) | 주어진 값을 출력 소스에 씀 |
void write(byte[] b) | 주어진 배열 b에 저장된 모든 내용을 출력 소스에 씀 |
void write(byte[] b, int off, int len) | 주어진 배여 b에 저장된 내용 중 off번째부터 len개 만큼만 읽어서 출력 소스에 씀 |
3) 보조 스트림
- 실제 데이터를 주고받는 스트림이 아닌 스트림의 기능을 보완하기 위한 보조 스트림(스트림 생성 후 보조 스트림 생성해야 함)
- 스트림의 기능 향상 및 새로운 기능 추가할 수 있음
- 보조 스트림도 InputStream과 OutputStream의 자손
- 바이트 기반 보조 스트림의 종류
입력 보조 스트림 | 출력 보조 스트림 | 설명 |
FilterInputStream | FilterOutputStream | 필터를 이용한 입출력 처리 |
BufferedInputStream | BufferedOutputStream | 버퍼를 이용한 입출력 처리 |
DataInputStream | DataOutputStream | 기본형 단위 (primitive type)로 데이터 처리 |
SequenceInputStream | 없음 | 두 개의 스트림을 하나로 연결 |
LineNumberInputStream | 없음 | 읽어 온 데이터 라인 번호 카운트(JDK1.1 부터 LineNumberReader로 대체) |
ObjectInputStream | ObjectOutputStream | 데이터를 객체 단위로 읽기/쓰기, 주로 파일을 이용하며 객체 직렬화와 관련됨 |
없음 | PrintStream | 버퍼 이용, 추가적인 print관련 기능(prin, printf, println 메서드) |
PushbackInputStream | 없음 | 버퍼 이용해 읽어온 데이터를 다시 되돌리는 기능(unread) |
3. 문자 기반 스트림
- 문자 데이터를 입출력할 때 사용
- Java는 char형이 2byte이기 때문에 바이트 기반의 스트림으로 처리하는데 어려움이 있는데 이를 2byte로 스트림을 처리해줌
- 여러 종류의 인코딩(encording)과 자바에서 사용하는 유니코드(UTF-16)간 변환을 자동으로 처리해줌
- 입출력 대상과 입/출력 목적에 따라 해당 스트림을 선택해서 사용
입출력 대상 | 입력 스트림 | 출력 스트림 |
파일 | FileReader | FileWriter |
메모리(byte배열) | CharReader | CharWriter |
프로세스(프로세스 간 통신) | PipedReader | PipedIWriter |
오디오 장치 | AudioReader | AudioWriter |
1) Reader
메서드명 | 설명 |
abstract void close() | 출력 스트림을 닫음, 사용하던 자원 반환 |
boolean markSupported() | mark()와 reset() 지원 여부 반환 |
void mark (int readlimit) | 현재위치 표시, 후에 reset()에 의해 표시해 놓은 위치로 돌아갈 수 있음 |
void reset() | 입력 소스 위치를 마지막으로 mark()가 호출되었던 위치로 되돌림 |
int read() | - 입력 소스로부터 하나의 문자를 읽어옴 - char의 범위(0 ~ 65535)의 정수를 반환, 입력 스트림의 마지막 데이터에 도달 시 -1 반환 |
int read(char[] c) | - 입력 소스로부터 매개변수로 주어진 배열 c의 크기만큼 읽어서 배열 c에 저장 - 읽어온 데이터의 개수 또는 -1 반환 |
abstract int read(char[] c, int off, int len) | - 입력 소스로부터 len개의 문자를 읽어서 배열 c의 지정된 위치 off부터 저장 - 읽어온 데이터의 개수 또는 -1 반환 |
int read(CharBuffer target) | 입력 소스로부터 읽어서 문자 버퍼 tartget에 저장 |
boolean ready() | 입력 소스로부터 데이터를 읽을 준비가 되었는지 여부 반환 |
long skip(long) | 현재 위치에서 주어진 문자수 n 만큼 건너 뜀 |
2) Writer
메서드명 | 설명 |
Writer append(char c) | 지정된 문자를 출력 소스에 출력 |
Write append(CharSequence c) | 지정된 문자열 CharSequence를 출력 소스에 출력 |
Write append(CharSequence c, int start, int end) | - 지정된 문자열 CharSequence의 일부를 출력 소스에 출력 - CharBuffer, String, StringBuffer가 CharSequence를 구현 |
abstract void close() | 출력 스트림을 닫음, 사용하던 자원 반환 |
abstract void flush() | - 스트림의 버퍼에 있는 모든 내용을 출력 소스에 씀 - 버퍼가 있는 스트림만 해당 |
void write(int b) | 주어진 값을 출력 소스에 씀 |
void write(char[] c) | 주어진 배열 c에 저장된 모든 내용을 출력 소스로 씀 |
abstract void write(char[] c, int off, int len) | 주어진 배열 c에 저장된 내용 중 off 번 째부터 len 길이 만큼 출력 소스에 씀 |
void write(String str) | 주어진 문자열 str을 출력 소스에 씀 |
void write(String str, int off, int len) | 주어진 문자열 str의 일부 중 off 번 째부터 len 길이 만큼 출력 소스에 씀 |
3) 문자 기반 보조 스트림
입력 보조 스트림 | 출력 보조 스트림 | 설명 |
FilterReader | FilterOutputStream | 필터를 이용한 입출력 처리 |
BufferedReader | BufferedOutputStream | 버퍼를 이용한 입출력 처리 |
LineNumberReader | 없음 | 읽어 온 데이터 라인 번호 카운트 |
없음 | PrintWriter | 버퍼 이용, 추가적인 print관련 기능(prin, printf, println 메서드) |
PushbackReader | 없음 | 버퍼 이용해 읽어온 데이터를 다시 되돌리는 기능(unread) |
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/package-summary.html
'Java' 카테고리의 다른 글
[Java] 문자열 비교 == 과 equals() (0) | 2023.09.02 |
---|---|
Java 네트워킹(networking) (0) | 2023.01.26 |
Java Optional<T> (0) | 2023.01.20 |
Java 스트림(stream) (0) | 2023.01.20 |
Java 람다(Lambda) (0) | 2023.01.17 |