IO 패키지?
프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번히 일어난다. 데이터는 사용자로부터 키보드를 통해 입력될 수도 있고, 파일 또는 네트워크로부터 입력될 수도 있다. 데이터는 반대로 모니터로 출력될 수도 있고, 파일로 출력되어 저장될 수도 있으며 네트워크로 출력되어 전송될 수도 있다. 자바에서 데이터는 스트림(stream)을 통해 입출력되므로 스트림의 특징을 잘 이해해야 한다. 스트림은 단일 방향으로 연속적으로 흘러가는 것을 말하는데, 물이 높은 곳에서 낮은 곳으로 흐르듯이 데이터는 출발지에서 나와 도착지로 들어간다는 개념이다.
출발지 -------------> 프로그램 -------------> 도착지
1. 키보드 도착지 출발지 1. 모니터
2. 파일 2. 파일
3. 프로그램 3. 프로그램
항상 프로그램을 기준으로 데이터가 들어오면 입력 스트림, 데이터가 나가면 출력 스트림이라는 것을 명심해야한다. 프로그램이 네트워크상의 다른 프로그램과 데이터 교환을 하기 위해서는 양쪽 모두 입력 스트림과 출력 스트림이 필요하다. 스트림의 특성이 단방향이므로 하나의 스트림으로 입력과 출력을 모두 할 수 없기 때문이다.
자바의 기본적인 데이터 입출력(IO : Input/Outut) API 는 java.io 패키지에서 제공하고 있다. java.io 패키지에는 파일 시스템의 정보를 얻기 위한 File클래스와 데이터를 입출력하기 위한 다양한 입출력 스트림 클래스를 제공하고 있다.
java.io 패키지의 주요 클래스 |
설명 |
File |
파일 시스템의 파일 정보를 얻기 위한 클래스 |
Console |
콘솔로부터 문자를 입출력하기 위한 클래스 |
InputStream / OutputStream |
바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스 |
FileInputStream/FileOutputStream DataInputStream/DataOutputStream ObjectInputStream/ObjectOutputStream PrintStream BufferedInputStream/BuffedOutputStream |
바이트 단위 입출력을 위한 하위 스트림 클래스 |
Reader / Writer |
문자 단위 입출력을 위한 최상위 입출력 스트림 클래스 |
FileReader / FileWriter InputStreamReader / OutputStreamWriter PrintWriter BufferdReader / BufferedWriter |
문자 단위 입출력을 위한 하위 스트림 클래스 |
스트림 클래스는 크게 두 종류로 구분된다. 하나는 바이트(byte)기반 스트림이고, 다른 하나는 문자(character) 기반 스트림이다. 바이트 기반 스트림은 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 받고 보낼 수 있으나, 문자 기반 스트림은 오로지 문자만 받고 보낼 수 있도록 특화되어 있다. 바이트 기반 스트림과 문자 기반 스트림은 최상위 클래스에 따라서 다음과 같이 구분된다.
최상위 클래스 : InputStream, OutputStream, Reader, Writer
하위 클래스 : XXXInputStream, XXXOutputStream, XXXReader, XXXWriter
InputStream은 바이트 기반 입력 스트림의 최상위 클래스이고, OutputStream은 바이트 기반 출력 스트림의 최상위 클래스이다. 이 클래스들을 각각 상속받는 하위 클래스는 접미사로 InputStream, OutputStream 이 붙는다. Reader는 문자 기반 입력 스트림의 최상위 클래스이고, Writer는 문자 기반 출력 스트림의 최상위 클래스이다. 이 클래스들을 각각 상속받는 하위 클래스는 접미사로 Reader, Writer가 붙는다. 예를 들어 그림, 멀티미디어, 텍스트 등의 파일을 바이트 단위로 읽어들일 때에는 FileInputStream을 사용하고, 바이트 단위로 저장할 때에는 FileOutputStream을 사용한다. 텍스트 파일의 경우, 문자 단위로 읽어들일 때에는 FileReader를 사용하고, 문자 단위로 저장할 때는 FileWriter를 사용한다.
'Java' 카테고리의 다른 글
Day 10~11. 친구관리 프로그램 (0) | 2018.12.23 |
---|---|
Day 10. 예외처리 (0) | 2018.12.19 |
Day 9. maven에서 json사용하기 (0) | 2018.12.17 |
어노테이션 (0) | 2018.12.15 |
Day 7. 정렬 (0) | 2018.12.14 |