본문 바로가기
IT/Java

자바 직렬화(Serializable)

by 성준하이 2022. 8. 15.
반응형

자바에서 사용하는 직렬화의 의미는

  • 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술
  • 시스템적인 면에서는 JVM 메모리에 상주(스택/힙)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술
    • 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태(역직렬화)

를 말한다.

 

사용하는 법은 다음과 같다.

@Data
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Dto implements Serializable{
     private String id;
     private String name;
}

이렇게 implements Serializable 를 하면서 dto 정의를 하고

Dto dto = new Dto("1","name");
byte[] serializeDto;
try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
     try(ObjectOutputStream oos = new ObjectOutputStream(baos)) {
          oos.writeObject(member);
          serializeDto = baos.toByteArray();
     }
}
// base64로 인코딩한 문자열
String base64Dto = Base64.getEncoder().encodeToString(serializeDto);

그리고 디코딩 관련해서는 아래와 같다.

byte[] deserializedDto = Base64.getDecoder().decode(base64Dto);

     try(ByteArrayInputStream bais = new ByteArrayInputStream(deserializedDto)) {
          try(ObjectInputStream ois = new ObjectInputStream(bais)) {
               Object objectDto = ois.readObject();

               Dto dto = (Dto) objectDto;
               System.out.println(dto);
          }
     }
반응형

'IT > Java' 카테고리의 다른 글

Entity, DTO, VO 차이  (47) 2022.08.18
JPA, Hibernate, Spring Data JPA  (48) 2022.08.17
delay 설정하기 (Thread.sleep)  (45) 2022.08.13
gson 에 대해서  (54) 2022.08.12
JSON Array 처리중 단일 데이터의 경우 문제(22.08.10)  (80) 2022.08.09

댓글