Input/Output

mingggkeee·2022년 1월 27일
0

Java

목록 보기
13/20

I/O와 Stream

  • I : input / O : Output
  • 데이터는 한쪽에서 주고 한쪽에서 받는 구조
    • 입출력의 끝단은 노드(Node)
    • 두 노드를 연결하고 데이터를 전송할 수 있는 개념 : 스트림(Stream)
    • 스트림은 단방향으로만 통신 가능
      • 하나의 스트림으로 입력과 출력을 같이 처리 불가능
    • 입력 스트림 : InputStream, Reader
    • 출력 스트림 : Outputstream, Writer

보조 스트림 : Filter Stream, Processing Stream

  • 다른 스트림에 부가적인 기능을 제공하는 스트림

    • 문자 set 변환
    • Buffering
    • 기본 데이터 형의 전송
    • 객체 입출력
  • 스트림 체이닝

    • 필요에 따라 여러 보조 스트림을 연결해서 사용 가능

보조 스트림의 종류

  • byte 스트림을 char 스트림으로 변환
    • byte 기반 : InputStreamReader, OutputStreamWriter
  • 버퍼링을 통한 속도 향상
    • byte 기반 : BufferedInputStream, BufferedOutputStream
    • char 기반 : BufferedReader, BufferedWriter
  • 객체 전송
    • byte 기반 : ObjectInputStream, ObjectOutputStream

객체 직렬화(serialization)

  • 객체를 저장하거나 네트워크로 전송하기 위해 연속적인 데이터로 변환하는 것
  • 반대의 경우는 역 직렬화(deserialization)
  • 조건
    • Serializable 인터페이스를 구현
    • 클래스의 모든 멤버가 Serializable 인터페이스를 구현해야 함
    • 직렬화에서 제외하려는 멤버는 transient 선언
  • serialVersionUID
    • 클래스의 변경 여부를 파악하기 위한 유일 키
    • 직렬화 할 때의 UID와 역 직렬화 할 때의 UID가 다를 경우 예외 발생
    • 직렬화되는 객체에 UID가 설정되지 않았을 경우 컴파일러가 자동 생성
      • 멤버 변경으로 인한 컴파일 시마다 변경 -> InvalidClassException 초래
    • 직렬화되는 객체에 대해서 serialVersionUID 설정 권장

Scanner와 BufferedReader

  • char 형태의 데이터를 읽기위한 클래스들
  • Scanner - 자동 형변환을 지원하는 등 사용이 간편하지만 속도가 느림
  • BufferedReader - 직접 스트림을 구성해야 하는 등 번거롭지만 속도가 빠름
profile
만반잘부

0개의 댓글