입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 것을 말한다.
자바에서 입출력을 수행하려면 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요하다. 이를 스트림(stream)이라고 한다. 14장의 스트림과 같은 용어를 쓰지만 다른 개념이다.
스트림이란 데이터를 운반하는데 사용되는 연결통로이다.
물이 한쪽방향으로만 흐르는 것 처럼, 스트림은 단방향 통신만 가능하다. 하나의 스트림으로 입력과 출력을 동시에 수행할 순 없다. 입출력하려면 입력을 위해선 입력 스트림, 출력을 위해선 출력 스트림, 적어도 두개의 스트림이 필요하다.
스트림은 큐와 같은 FIFO구조를 갖고 있다.
스트림은 바이트단위로 데이터를 전송한다. 입출력 대상에 따라 다음과 같은 입출력스트림이 있다.
이들은 모두 InputStream, OutputStream의 자손이고, 각각 읽고 쓰는데 필요한 추상메서드를 자신에 맞게 구현해 놓았다.
자바에서는 java.io패키지를 통해 입출력 관련 클래스들을 제공하고 있다. 또한 입출력을 처리하는 표준화된 방식을 제공해 입출력의 대상이 달라져도 동일한 방법으로 입출력이 가능하다.