13. 입출력
1) 보조스트림
- InputStreamReader : 바이트스트림을 문자스트림으로 연결시켜주는 역할을 하는 보조스트림
- BufferedReader : 문자 입력 스트림에 연결되어 버퍼를 제공해주는 보조스트림
2) file : 파일을 제어하기 위한 클래스로 입출력 기능을 제공하지 않는다.
- 파일의 입출력은 입출력 스트림을 사용해야 한다.
3) 스트림
- 스트림의 특징
- 단방향 : 입력과 출력을 동시에 하나의 스트림으로 할 수 없음. 각각 따로 열어야 함.
- 선입선출 : 먼저 보낸 값이 먼저 나옴
- 스트림의 구분
- 통로 사이즈
- 바이트 스트림 : 1byte짜리 / InputStream, OutputStream
- 문자 스트림 : 2byte짜리 / Reader, Writer
- 외부 매체와 직접 연결 유무
- 기반 스트림 : 외부 매체와 직접적으로 연결하는 통로
- 보조 스트림 : 속도를 빠르게 하거나 유용한 기능 제공 등을 하는 보조역할의 통로
3) FileOutputStream
- 파일로 데이터를 1바이트 단위로 출력하는 스트림
- true 미작성시 : 기존에 해당 파일 있을 경우 덮어씌워짐 (기본값 false)
- true 작성시 : 기존에 파일이 있는 경우 이어서 작성됨 (append)
- 없는 경로 제시시 à FileNotFoundException 발생
- write( ) 메소드 : 파일 데이터 출력하고자 할 때 사용
4) FileInputStream
- 파일로부터 데이터를 1바이트 단위로 입력받는 스트림
- 해당 파일이 없으면 à FileNotFoundException 발생
5) FileWriter
- 파일로 데이터를 2byte 단위로 출력하기 (한글이 깨지지 않음)
6) FileReader
- 파일로부터 데이터를 2byte 단위로 입력받기
7) BufferedWriter
- 장점 : 2byte 단위로 데이터가 출력될 때 버퍼라는 공간에 계속 쌓고 한 번에 출력해줌. 기반 스트림에서는 제공해주지 않는 newLine( ) 메소드를 제공하여 개행 기능이 있음.
8) try with resource
- 스트림 사용 후 알아서 닫아줌(close( ))
try(BufferedWriter bw = new BufferedWriter(new FileWriter("c_buffer.txt"))) {
bw.write("안녕하세요.\n");
bw.write("반갑습니다.");
bw.newLine();
bw.write("감사합니다");
} catch (IOException e) {
e.printStackTrace();
}
9) BufferedReader
- 데이터를 읽어들일 때 readLine( ) 메소드를 사용하여 버퍼에 쌓았다가 한 번에 한 줄씩 읽어들임.
10) 객체를 파일에 출력할 때 사용하는 스트림
- FileOutputStream : 파일출력에 사용되는 기본 바이트 스트림 클래스
- ObjectOutputStream : 객체 단위로 출력시 사용되는 보조 바이트 스트림 클래스
11) 파일로부터 읽어들일 때 사용하는 스트림
- FileInputStream : 파일로부터 데이터를 읽어들이기 위해 사용되는 기본 바이트 스트림 클래스
- ObjectInputStream : 스트림으로부터 객체 단위로 읽어들이기 위해 사용되는 보조 바이트 스트림 클래스
*ObjectOutputStream 과 ObjectInputStream을 해야할 때 반드시 해야하는 것은? 직렬화
12) EOFException
- 파일에 더 이상 읽을 내용이 없을 때 발생하는 Exception
- 발생할 수밖에 없는 예외이기 때문에 처리 로직을 작성해줘야 함.
13) 직렬화
- 객체를 입출력하고자 한다면 반드시 직렬화가 필요하다.
- 객체를 바이트의 배열로 변환해서 파일이나 메모리 등을 저장하는 과정
- 저장된 것을 다시 객체로 변환하는 것을 역직렬화라고 한다.
'Java' 카테고리의 다른 글
서비스 전체 트랜잭션 롤백 처리 (0) | 2023.11.08 |
---|---|
자바 요약 정리 - 예외 처리 (0) | 2021.07.12 |
자바 요약 정리 - 이차원배열 (0) | 2021.07.12 |
자바 요약 정리 - 객체배열 (0) | 2021.07.12 |
자바 요약 정리 - 배열 (0) | 2021.07.08 |