Chapter 15 입출력(I/O)

Red Culture·2021년 6월 22일
0

입출력 스트림 구분

I/O 대상 기준 - 입력 스트림, 출력 스트림
자료의 종류 - 바이트 스트림, 문자 스트림 (2바이트 씩 처리)
스트림의 기능 - 기반 스트림 (대상에 직접 자료를 읽고 쓰는 기능), 보조 스트림 (읽고 쓰는 기능은 없지만 추가적인 기능을 제공, 데코레이터 패턴으로 사용)

표준 입출력

  • System.in
    한 바이트 씩 읽어들인다. 한글과 같은 여러 바이트로 된 문자를 읽기 위해서는 InputStreamReader와 같은 보조 스트림을 사용해야한다. (바이트 단위로 자료를 읽을 때 문자로 바꿔주는 역할)

바이트 단위 스트림

InputStream - 바이트 단위 입력 스트림 최상위 클래스
OutputStream - 바이트 단위 출력 스트림 최상위 클래스

문자 단위 스트림

Reader - 문자 단위로 읽는 최상위 스트림
Writer - 문자 단위로 쓰는 최상위 스트림

보조 스트림

-실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림이다.
FilterInputStream과 FilterOutputStream이 보조 스트림의 최상위 클래스이다.
생성자의 매개 변수로 또 다른 스트림을 가진다. 데코레이터 패턴으로 사용할 수 있다.
-> 바이트 단위 파일 입력 스트림(기반 스트림) + 문자로 변환 기능 추가(보조 스트림) + 버퍼링 기능 추가(보조 스트림)

-Buffered 스트림: 내부에 8192 바이트 배열을 가지고 있다. 읽거나 쓸 때 속도가 빠르다.
-DataInputStream/DataOutputStream: 자료가 저장된 상태 그대로 자료형을 유지하며 읽거나 쓰는 기능을 제공하는 스트림이다.

기타 입출력 클래스

-File 클래스: 파일 개념을 추상화한 클래스로 입출력 기능은 없고 파일의 속성, 경로, 이름 등을 알 수 있다.
-RandomAccessFile 클래스: 입출력 클래스 중 유일하게 파일 입출력을 동시에 할 수 있는 클래스이다. 파일 포인터가 있어서 읽고 쓰는 위치의 이동이 가능하고 다양한 자료형에 대한 메서드가 제공된다.

직렬화 (Serialization)

인스턴스의 상태를 그대로 저장하거나 네트웍으로 전송하고 이를 다시 복원하는 방식이다.
ObjectInputStream과 ObjectOutputStream을 사용한다.
인스턴스의 내용이 외부로 유출되는 것이므로 객체의 직렬화 가능 여부를 구현 코드가 없는 mark interface를 통해 명시해야 한다. (implements Serializable)

  • transient 키워드
    -해당 키워드로 선언한 변수는 직렬화할 수 없다.

  • Externalizable 인터페이스
    -readExternal(ObjectInput in), writeExternal(ObjectOutput out) 메서드를 구현하는데 직접 읽고/쓰기를 구현할 수 있다.

profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글