자바 I/O 스트림
포스트
취소

자바 I/O 스트림

I/O 스트림

  • 스트림이란 ‘데이터의 흐름’을 의미한다
  • 여기선 데이터의 이동 통로로 받아들이면 편하다
  • 컬렉션 스트림과 달리 데이터 입출력에 대한 내용이다
  • (I/O 스트림은 java.io, 컬렉션 스트림은 java.util.stream 소속)
  • 입출력 대상은 파일, 하드웨어, 서버 또는 클라이언트 등 다양하다
  • 입출력 대상이 달라지면 코드상 입출력 방법도 달라지는 것이 일반적인데 자바에서는 I/O 스트림 모델이라는 것을 정의하여 이를 해결하였다
  • 할당된 메모리 자원은 스트림을 소멸시켜 다시 사용할 수 있도록 반환해야 된다

기본적인 데이터의 입출력 단위는 바이트

1
2
3
4
5
- 데이터 입력시 1바이트의 유효한 데이터에 
 3바이트의 0을 채워넣어 int형 데이터로 반환한다
 즉, 반환하는 값의 정상 범위는 1바이트 크기에 해당하는 0~255이다
- 반대로 데이터 출력시 int형 데이터를 보내지만 첫 번째 바이트만 입력받는다
- 이와 같이 파일의 크기에 상관없이 1바이트씩 통신하면 제법 골치 아픈 일이다
  • 바이트 스트림에 byte 타입 배열을 주고 받는 것도 가능하다

버퍼 스트림

1
2
3
4
- 다양한 필터 스트림 중 버퍼 스트림은 특히 사용 빈도가 높다
- 버퍼 스트림은 내부에 메모리 공간을 가진다
- 파일에 빈번히 접근하는 행위를 줄이는 게 핵심
- 버퍼 스트림에 필터 스트림을 조합하여 효율적으로 스트림을 구성할 수 있다

객체 직렬화

1
2
3
4
5
6
- 객체를 입출력 함
- 객체 입출력의 대상이 되는 클래스는 Serializable 인터페이스를 상속
- 인스턴스 자체를 입출력하므로 참조 인스턴스까지 함께 저장된다
 하지만 이 과정에선 참조 인스턴스의 클래스도 마커 인터페이스를 상속해야한다
- 참조까진 저장하고 싶지 않다면 transient 선언을 추가한다
 이는 기본 자료형 변수에도 해당된다

NIO

1
2
3
- new I/O 라 말할 수 있으며 기존 I/O 패키지의 보완 api
- 자바4 : java.nio, 자바7 : java.nio.file
- 입출력 스트림을 이용할 일이 생기면 참고해볼 것
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.