인터뷰 기록을 위한 Java 직렬화 및 역직렬화

질문:

1. 직렬화와 역직렬화를 알고 있습니까? 달성하는 방법

2. 직렬화를 사용하는 이유

직렬화 소개

        직렬화는 개체의 상태를 저장하거나 전송할 수 있는 형식으로 변환하는 프로세스입니다. 직렬화 중에 개체는 디스크 파일에 저장하거나, 네트워크를 통해 원격 시스템으로 보내거나, 메모리 내 캐시에 저장할 수 있는 특정 형식으로 인코딩됩니다. 반대로 인코딩된 개체를 이러한 저장 영역에서 개체로 복원하는 프로세스를 역직렬화라고 합니다. 직렬화는 분산 응용 프로그램, 네트워크 통신, 캐싱 메커니즘, 지속성 등에 자주 사용되는 컴퓨터 과학의 중요한 기술입니다.

JSON도 일종의 직렬화입니다.

직렬화 구현:

        Java에서 직렬화를 구현하는 두 가지 주요 방법은 Java 자체 직렬화와 타사 라이브러리에서 제공하는 직렬화입니다.

  1. Java와 함께 제공되는 직렬화: Java는 직렬화를 구현하기 위해 Serializable 인터페이스를 제공합니다. 개체 클래스가 직렬화 가능 인터페이스를 구현하도록 하면 개체를 바이트 스트림으로 직렬화할 수 있으며 네트워크에서 전송하거나 파일에 저장할 수 있습니다.

  2. 타사 라이브러리에서 제공하는 직렬화: 일반적으로 사용되는 타사 라이브러리에는 Google의 Protobuf, Apache의 Avro 및 Facebook의 Thrift가 포함됩니다. 이러한 라이브러리는 서로 다른 직렬화 알고리즘을 사용하여 개체를 직렬화하므로 더 나은 성능과 더 작은 직렬화된 데이터 볼륨을 제공할 수 있습니다.

        다양한 직렬화 방법이 다양한 시나리오에 적합합니다. Java의 내장 직렬화 방식은 사용하기 쉽지만 직렬화된 데이터가 크고 타사 라이브러리에서 제공하는 직렬화 방식만큼 성능이 좋지 않습니다. 타사 라이브러리에서 제공하는 직렬화 방법은 더 나은 성능과 데이터 압축 효과를 달성하기 위해 실제 요구에 따라 다른 알고리즘을 선택할 수 있습니다.

직렬화를 사용하는 이유:

        우리는 직렬화가 전송에 사용된다는 것을 알고 있으며, 누가 자신의 클래스에서 다른 클래스로 직렬화할 것인지를 알고 있습니다. 따라서 직렬화 된 전송을 사용하여 응답하는 관점에서

  1. 네트워크 전송

    객체를 네트워크를 통해 전송해야 하는 경우 객체를 네트워크를 통해 편리하게 전송할 수 있는 이진 형식으로 직렬화해야 합니다. 수신자가 개체를 수신한 후 이진 데이터는 역직렬화를 통해 다시 개체로 변환할 수 있습니다.
  2. 지구화

    개체를 디스크나 데이터베이스에 유지해야 하는 경우 개체를 이진 형식으로 직렬화한 다음 파일이나 데이터베이스에 저장할 수 있습니다. 개체를 읽어야 하는 경우 이진 데이터는 역직렬화를 통해 다시 개체로 변환할 수 있습니다.
  3. 언어 간 전송

    서로 다른 프로그래밍 언어 간에 개체를 전송해야 하는 경우 개체를 표준 형식(예: JSON 또는 XML)으로 직렬화할 수 있으며 수신자는 표준 형식에 따라 데이터를 자체 개체로 변환합니다. 이러한 방식으로 언어 간 커뮤니케이션을 쉽게 실현할 수 있습니다.

        즉, 직렬화는 개체를 이진 형식으로 변환할 수 있으므로 개체를 다른 시스템에서 쉽게 전송하고 유지할 수 있습니다. 동시에 Java의 직렬화 메커니즘은 언어 간 전송을 지원할 수 있는 일반적인 메커니즘입니다.

JSON이 있는데 왜 Java로 직렬화해야 합니까?

        일반적으로 개체의 직렬화 및 역직렬화에 JSON 형식을 사용할 수 있습니다. 그러나 경우에 따라 Java 직렬화를 사용하는 것이 더 적절할 수 있습니다.

  1. 데이터 무결성

    Java 직렬화는 데이터 무결성과 일관성을 보장할 수 있는 객체의 내부 상태 및 모든 속성을 포함하여 객체의 완전한 직렬화 및 역직렬화입니다.
  2. 객체 유형 유연성

    Java 직렬화를 사용하면 전송 과정에서 객체의 유형 정보를 포함할 수 있으며 역직렬화 과정에서 객체의 인스턴스를 생성하여 객체 유형의 유연성을 보장할 수 있습니다.
  3. 개체 관계 무결성

    Java 직렬화는 부모-자식 관계, 구성원 관계 등 개체 간의 관계를 직렬화할 수 있으며 관계의 무결성을 보장할 수 있습니다.
  4. 애플리케이션 시나리오

    Java 직렬화는 일반적으로 Java 프로그램 내부의 개체 직렬화에 사용되는 반면 JSON은 웹 응용 프로그램의 데이터 교환 및 저장에 자주 사용됩니다.

직렬화 사용의 이점:

        Java의 직렬화는 개체를 네트워크를 통해 전송하거나 파일에 저장할 수 있도록 개체를 바이트 스트림으로 변환하는 프로세스입니다. 직렬화에는 다음과 같은 이점이 있습니다.

  1. 네트워크 전송: 네트워크 전송 중에 개체는 전송을 위해 바이트 스트림으로 직렬화될 수 있으므로 네트워크를 통해 전송되는 데이터의 양을 줄이고 전송 효율성을 향상시킬 수 있습니다.
  2. 교차 플랫폼 호환성: 교차 플랫폼 데이터 전송을 실현하기 위해 서로 다른 플랫폼의 Java 가상 머신에서 직렬화된 개체를 역직렬화할 수 있습니다.
  3. 영구 저장소: 개체를 직렬화하고 파일에 저장할 수 있으므로 영구 데이터 저장소를 달성하기 위해 필요할 때 다시 읽을 수 있습니다.
  4. 캐싱: 개체를 자주 읽어야 하는 경우 빠른 읽기 및 시스템 성능 향상을 위해 직렬화된 개체를 메모리에 캐시할 수 있습니다.

일반적으로 Java 직렬화는 데이터 전송, 저장 및 캐싱과 같은 작업을 편리하게 구현하고 시스템 효율성 및 성능을 향상시킬 수 있습니다.

요약하다:

  • JSON도 일종의 직렬화입니다.
  • 직렬화는 성능 및 데이터 압축 효과를 달성할 수 있습니다.
  • Java 직렬화된 개체는 다른 플랫폼의 Java 가상 머신에서 역직렬화될 수 있습니다.
  • Java 직렬화는 데이터 무결성과 일관성을 보장하기 위해 개체의 내부 상태, 모든 속성, 부모 등을 포함하여 개체의 완전한 직렬화 및 역직렬화입니다.

추천

출처blog.csdn.net/qq_37761711/article/details/130298436