직렬화(Serializtion): Object 입출력 스트림

2022. 4. 29. 10:42·자바/입출력 IO

1. 직렬화

- 직렬화(Serializtion)란? 객체를 데이터 스트림으로 만드는 것을 말한다.

 

- 즉, 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것이다.

 

- 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization) 라고 한다.

 

 

 

 

2. ObjectInputStream과 ObjectOutputStream

- 직렬화는 ObjectOutputStream을, 역직렬화는 ObjectInputStream을 사용한다.

 

- ObjectInputStream과 ObjectOutputStream은 InputStream과 OutputStream을 직접 상속받지만, 

기반 스트림을 필요로 하는 보조 스트림이다.

 

- 그래서 객체를 생성할 때, 기반(주) 스트림을 지정해야 한다. 

 

 

 

- 만약 직렬화(파일에 객체 저장)을 하고싶다면 아래의 예시 코드를 보자.

 

FileOutputStream fos = new FileOutputStream("objectfile.ser");

ObjectOutputStream out = new ObjectOutputStream(fos);

 

out.writeObject(new UserInfo());

 

( 위의 코드를 해석하면, objectfile.ser이라는 파일에 UserInfo 객체를 직렬화하여 저장한다. )

 

 

 

- 반대로, 역직렬화는 아래의 예시 코드처럼 해야한다. 

 

FileInputStream fis = new FileInputStream("objectfile.ser");

ObjectInputStream in = new ObjectInputStream(fis);

 

UserInfo info = (UserInfo) in.readObject();

 

 

 

- readObject()와 writeObject() 이외에도 여러가지 타입의 값을 입출력할 수 있는 메서드를 제공한다.

( ex) readDouble, WriteBytes 등 )

 

( defaultReadObject() 와 defaultWriteObject()는 자동 직렬화를 수행한다. )

 

 

- 객체를 직렬화/역직렬화하는 작업은 객체의 모든 인스턴스 변수가 참조하는 모든 객체에 대한 것이기

때문에 상당히 복잡하며 시간도 오래걸리므로, 아래와 같은 메서드 2개를 직접 구현해야 한다.

 

(1) private void writeObject(ObjectOutputStream out) throws IOException{

}

 

(2) private void readObject(ObjectInputStream in) throws IOException{

}

 

 

 

다음장

직렬화가 가능한 클래스 만들기 - Serializable, transient (1) (tistory.com)

 

직렬화가 가능한 클래스 만들기 - Serializable, transient (1)

1. 직렬화가 가능한 클래스를 만드는 방법 - 직렬화하고자 하는 클래스가 java.io.Serializable 인터페이스를 구현하도록 하면 된다. - 그저 아래 코드처럼 따로 구현할 필요없이 implements만 해주면 된

kind-coding.tistory.com

 

저작자표시 (새창열림)

'자바 > 입출력 IO' 카테고리의 다른 글

직렬화가 가능한 클래스 만들기 - Serializable, transient (2)  (0) 2022.04.29
직렬화가 가능한 클래스 만들기 - Serializable, transient (1)  (0) 2022.04.29
표준 입출력과 File: File(4)  (0) 2022.04.28
표준 입출력과 File: File(3)  (0) 2022.04.28
표준 입출력과 File: File(2)  (0) 2022.04.28
'자바/입출력 IO' 카테고리의 다른 글
  • 직렬화가 가능한 클래스 만들기 - Serializable, transient (2)
  • 직렬화가 가능한 클래스 만들기 - Serializable, transient (1)
  • 표준 입출력과 File: File(4)
  • 표준 입출력과 File: File(3)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      소켓 프로그래밍
      Arrays
      serializable
      불안정 정렬
      안정 정렬
      자바 개념
      알고스팟
      유용한 클래스
      ServerSocket
      코드트리
      map()
      InputStream
      TCP 소켓 프로그래밍
      중간연산
      java.lang패키지
      역직렬화
      다형성
      outputstream
      java.time 패키지
      Collections Framework
      snail
      람다식
      스트림
      코딩트리조별과제
      선택 정렬
      file
      문자 기반 스트림
      안드로이드 스튜디오
      코딩테스트
      제자리 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    직렬화(Serializtion): Object 입출력 스트림
    상단으로

    티스토리툴바