[32] 자바 IO (2)
32.1. 바이트 단위 스트림
InputStream
- 바이트 단위 입력 스트림 최상위 추상 클래스
- 하위 스트림이 상속받아 구현함
- 주요 메서드
- int read()
- 입력 스트림으로부터 한 바이트의 자료를 읽음.
- 읽은 자료의 바이트 수를 반환함
- int read(byte[] b)
- 입력 스트림으로부터 b[] 크기의 자료를 b[]에 읽음.
- 읽은 자료의 바이트 수를 반환함
- int read(byte[] b, int off, int len)
- 입력 스트림으로부터 b[] 크기의 자료를 b[]의 off변수 위치부터 len만큼 읽음.
- 읽은 자료의 바이트 수 만큼 반환함
- void close()
- 입력 스트림과 연결된 대상 리소스를 닫음.
- int read()
- FileInputStream
- int read() : 파일에서 한 바이트씩 자료 읽기, 파일의 끝까지 한 바이트씩 자료 읽기
- int read(byte[] b) : 파일에서 바이트 배열로 자료 읽기
- 배열에 남아 있는 자료가 있을 수 있음
OutputStream
바이트 단위 출력 스트림 최상위 추상 클래스
하위 스트림이 상속받아 구현함
주요 메서드
- void write(int b)
- 한 바이트를 출력함
- void write(byte[] b)
- b[] 크기의 자료를 출력함
- void write(byte[] b, int off, int len)
- b[] 배열에 있는 자료의 off 위치부터 len 개수 만큼 자료를 출력함
- void flush()
- 출력 버퍼를 강제로 비워 자료를 출력함
- 출력 버퍼를 비울때 사용
- void close()
- 출력 스트림과 연결된 대상 리소스를 닫음.
- 내부에서 flush()가 호출되므로 close() 메서드가 호출되면 출력 버퍼가 비워짐.
- void write(int b)
FileOutputStream
- 파일에 한 바이트 쓰기
- byte[] 배열에 A-Z까지 넣고 배열을 한꺼번에 파일에 쓰기
32.2. 문자 단위 입력 스트림
- Reader
- 문자 단위 입력 스트림 최상위 추상 클래스
- 하위 스트림이 상속받아 구현함
- 주요 하위 클래스
- FileReader
- 파일에서 문자 단위로 읽는 스트림 클래스
- InputStreamReader
- 바이트 단위로 읽은 자료를 문자로 변환해주는 보조 스트림 클래스
- BufferedReader
- 문자로 읽을 때 배열을 제공하여 한꺼번에 읽을 수 있는 기능을 제공하는 보조 스트림
- FileReader
- 주요 메서드
- int read()
- 파일로부터 한 문자를 읽음. 읽은 문자를 반환함
- int read(char[] cbuf)
- 파일로부터 cbuf 배열에 문자를 읽음.
- int read(char[] cbuf, int off, int len)
- 파일로부터 cbuf 배열의 off위치로부터 len 개수만큼의 문자를 읽음
- void close()
- 입력 스트림과 연결된 대상 리소스를 닫음
- int read()
32.3. 문자 단위 출력 스트림
- Writer
- 문자 단위 출력 스트림 추상 클래스
- 하위 스트림이 상속받아 구현함
- 주요 하위 클래스
- FilterWriter
- 파일에서 문자 단위로 출력하는 스트림 클래스
- OutputStreamWriter
- 바이트 단위의 자료를 문자로 변환해 출력해주는 보조 스트림 클래스
- BufferedWriter
- 문자로 쓸 때 배열을 제공하여 한꺼번에 쓸 수 있는 기능을 제공하는 보조 스트림
- FilterWriter
- 주요 메서드
- void write(int c)
- 한 문자를 파일에 출력함
- void write(char[] cbuf)
- 문자 배열 cbuf의 내용을 출력함
- void write(char[] cbuf, int off, int len)
- 문자 배열 cbuf의 off위치에서부터 len 개수의 문자를 출력함
- void write(String str)
- 문자열 str을 출력함
- void write(String str, int off, int len)
- 문자열 str의 off번째 문자로부터 len개수 만큼 출력함
- void flush()
- 출력하기 전에 자료가 있는 공간(출력 버퍼)을 비워 출력하도록 함
- void close()
- 스트림과 연결될 리소스를 다음. 출력 버퍼도 비워짐.
- void write(int c)
32.4. 보조 스트림 클래스들
보조 기능을 제공하는 스트림
- 기반 스트림 + 보조 스트림 + 보조 스트림
- 예) 바이트 단위 파일 입력 스트림 + 문자로 변환 기능 추가 + 버퍼링 기능 추가
- 기반 스트림 + 보조 스트림 + 보조 스트림
FilterInputStream, FilterOutputStream이 보조 스트림의 상위 클래스임
- InputStreamReader와 OutputStreamWriter
- 바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림
- BufferedInputStream와 BufferedOutputStream
- 약 8k의 배열이 제공되어 입출력이 빠르게 하는 기능이 제공되는 보조 스트림
- BufferedReader와 BufferedWriter
- 문자용 입출력 보조 스트림
- InputStreamReader와 OutputStreamWriter
생성자의 매개변수로 또 다른 스트림(기반 스트림이나 다른 보조 스트림)을 가짐
- FilterInputStream(InputStream in)
- 생성자의 매개변수로 InputStream을 받음
- FilterOutputStream(OutputStream out)
- 생성자의 매개변수로 OutputStream을 받음
- FilterInputStream(InputStream in)
Decorator Pattern으로 구현됨
32.5. 그 외 입출력 클래스
- File 클래스
- 파일 개념을 추상화한 클래스
- 입출력 기능은 없고, 파일의 이름, 경로 등 속성을 알 수 있음
32.6. 데코레이터 패턴
- 자바의 입출력 스트림은 decorator pattern 임.
- 여러 decorator들을 활용하여 다양한 기능을 제공
- 상속보다 유연한 확장이 가능한 패턴
- 데코레이터는 다른 데코레이터 또는 컴포넌트를 포함해야 함
- 지속적인 기능 추가와 제거가 용이함
ex) 아메리카노 아메리카노 + 우유 => 카페 라떼 아메리카노 + 우유 + 모카시럽 => 모카 커피 아메리카노 + 우유 + 모카시럽 + 크림 => 크림 올라간 모카 커피
'JAVA' 카테고리의 다른 글
[JAVA]UML 종합 (0) | 2023.02.12 |
---|---|
[JAVA]스레드 (0) | 2023.02.12 |
[JAVA]자바 IO (1) (0) | 2023.02.11 |
[JAVA]예외처리 (0) | 2023.02.10 |
[JAVA]스트림 (0) | 2023.02.10 |
댓글