키보드로 데이터를 입력할 때 문자가 입력 되는 것 같지만 , 실제는 그렇지 않고 이진수가 입력된다.
이러한 이진수를 운영체제에서 문자로 변환 시키는 것이다.
자바에서는 이러한 입출력을 처리하기 위해서 스트림이라는 가상의 통로를 만들어 두고, 실제 장치를 직접 다루는 대신 가상의 스트림이라는 장치를 통해서 입출력을 수행한다.
자바에서 이를 맞는 대표적인 API가 java.io 패키지에 있는 클래스들 이다.여기서 I/O(입출력) 는 input,output의 줄임말로 양자의 차이를 잘 알아 두어야 한다.
- 초기단계의 자바에서는 I/O를 처리하기 위해 java.io 패키지의 클래스에서 처리했다.
- 바이트(byte) 기반- InputStream/OutPutStream 클래스
- 문자(char)기반-reader/writer 클래스를 사용 한다.
- JDK 1.4 부터는 보다 빠른 I/O를 처리 하기 위해서 NIO(New I/O),java 1.7 NIO2 클래스가 추가 되었다.
입출력 Stream 개념 이해하기

IN/OUT 개념
IN/OUT의 구분은 메모리를 기준으로 이루어지며,자료가 메모리로 전송되는 것을 IN,메모리의 자료를 외부로 전송하는 것은 OUT이다.
- 파일과 같은 물리적인 저장소에 있는 자료를 메모리로 전송하는 것이 IN이다.
- 메모리에 있는 자료를 파일과 같은 물리적인 저장소로 전송하는 것은 OUT이다.
Stream 개념
- 파일의 자료를 읽기위해서는 파일을 읽을 수 있도록 물리적인 저장소까지 연결 통로가 필요하며,이러한 가상의 연결 통로를 스트림이라고 한다.
- 스트림은 연결이 되면 단방향으로 자료 전송을 할 수있어 읽기 또는 쓰기만 가능하다.