-
Java | I/O(Input / Output) 입출력 개요JAVA/JAVA 2020. 2. 6. 22:07
I / O (Input / Output) 입출력 개요
데이터를 읽고 쓰는 것을 목표로 하는 자바의 API
ex) Input: 데이터를 파일이나 네트워크로부터 불러옴(read)
Output: 파일에 데이터를 작성(write), 네트워크로 응답(response)을 보냄★ 입출력 메소드를 사용할 때는 반드시 예외 처리를 해주어야 함 ★
Stream 스트림
소스와 타겟 사이에서 데이터를 전송하는 가상의 통로
- Source(소스): 자료를 읽는 대상
- Target(타겟): 자료를 쓰는 대상
- 단방향으로만 이동함
- 다단계 결합 가능: 여러 개의 스트림을 생성자를 이용해서 결합할 수 있음
기반 스트림 + 보조 스트림 - 무한 대기: 데이터를 입력받을 때까지 계속해서 대기하는 상태
입력 스트림 / 출력 스트림
입력 스트림과 출력 스트림은 각각 한 개씩 존재하며 단방향으로 이동
- 입력 스트림: 소스로부터 자료를 읽어 들일 때 사용하는 스트림
InputStream이나 Reader로 끝나는 이름의 클래스는 입력 스트림 - 출력 스트림: 타겟에 자료를 전송할 때 사용하는 스트림
OutputStream이나 Write로 끝나는 이름의 클래스는 출력 스트림
종류 예시 입력 스트림 FileInputStream, FileReader, BufferedInputStream, BufferedReader 등 출력 스트림 FileOutputStream, FileWriter, BufferedOutputStream, BufferedWriter 등
바이트 단위 스트림 / 문자 단위 스트림
자바의 스트림은 기본적으로 Byte 단위로 입출력이 이루어지는데
Char 형은 2바이트이기 때문에 1바이트만 읽으면 한글 같은 문자는 깨짐
따라서 입출력 중 가장 많이 사용하는 자료인 문자를 위한 문자 단위 스트림 제공- 바이트 단위 스트림: 이미지, 동영상, 음악 파일 등 대부분의 파일 읽기 / 쓰기
클래스 이름이 Stream으로 끝나는 경우는 바이트 단위 스트림 - 문자 단위 스트림: 문자를 읽고 쓰는데 사용하는 스트림
영문자의 경우에는 바이트 단위 스트림으로도 읽기 / 쓰기 가능
Reader나 Writer로 끝나는 이름은 문자를 위한 스트림 클래스
종류 예시 바이트 스트림 FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream 등 문자 스트림 FileReader, FileWriter, BufferedReader, BufferedWriter 등
기반 스트림 / 보조 스트림
스트림이 자료를 직접 읽거나 쓰는가, 아니면 다른 스트림에 부가 기능을 제공하는가에 따라 분류
- 기반 스트림: 소스나 타겟에 직접 읽고 쓸 수 있으며 입출력 대상에 직접 연결되어 생성되는 스트림
- 보조 스트림: 직접 읽고 쓰는 기능은 없고, 항상 다른 스트림을 포함하여 생성됨
종류 예시 기반 스트림 FileInputStream, FileOutputStream, FileReader, FileWriter 등 보조 스트림 InputStreamReader, OutputStreamWriter, BufferedInputStream, BufferedOutputStream 등 ※ 기반 스트림과 보조 스트림은 이름만으로 구별하기 어렵기 때문에 자주 사용되는 것들은 외워둘 필요가 있음
자바 입출력의 개요에 대해 대략적으로 살펴보았습니다.
입출력에는 표준 입출력도 포함되지만 예제와 함께 다음 글에서 다룰 예정입니다.
여기서는 스트림이 어떤 기준에 따라 어떻게 분류되는가에 대해서만 알아두시면 될 것 같습니다.
입출력 자료의 이론적인 부분은 'Do it! 자바 프로그래밍 입문' 저서를 참고했습니다.
'JAVA > JAVA' 카테고리의 다른 글
Java | I/O 바이트 단위 스트림 (0) 2020.02.06 Java | I/O 표준 입출력 (0) 2020.02.06 Java | 예외 처리 throws & throw (0) 2020.02.05 Java | 예외 처리 try~catch~finally (0) 2020.02.05 Java | Exception 예외 (0) 2020.02.05