직렬화 란 무엇입니까?
컴퓨터 프로그래밍에서 "직렬화"는 로컬 메모리에 저장된 데이터 구조를 가져 와서 네트워크를 통해 전송하거나 디스크에 저장하여 다른 프로그램에서 다시 사용할 수있는 바이트 스트림으로 변환하는 프로세스입니다. 직렬화를 사용하면 객체의 상태를 저장하여 동일한 프로그램에서 나중에 다시로드 할 수도 있습니다 .이 기능의보다 복잡한 사용은 원격 프로 시저 호출을 호출하는 것입니다 (RPC) 네트워크를 통해 다른 컴퓨터에서 효과적으로 프로 시저를 실행할 수 있습니다.이 메커니즘을 사용하면 대규모 네트워크 시스템을 통해 데이터 개체를 배포 할 수도 있습니다.
거의 모든 현대 컴퓨터 언어는 직렬화를 기본적으로 지원하거나이 기능을 추가 할 수있는 라이브러리를 가지고 있습니다 . 개체가 직렬화 될 때, object 개체의 모든 필드가 평탄화됩니다 . 이 과정은 수축이라고도합니다 또는 마샬링 데이터가 모든 출력 스트림에 기록 될 수있는 1 차원 바이트 행으로 변환됩니다. stream 출력 스트림 유형은 중요하지 않으며 file 파일 또는 네트워크 소켓 일 수 있습니다.
데이터가 직렬화되고 최종 위치로 전송되면 ser 직렬화 해제 프로세스가 시작됩니다. stream 바이트 스트림을 읽는 프로그램은 모든 정보를 복원하고 원래 개체의 새로운 인스턴스에 배치하여 정확한 사본. holding 대상이 보유한 데이터 만 only 마샬링됨을 이해하는 것이 중요합니다. 객체와 그 메소드 및 기타 구현 데이터는 그렇지 않습니다. 이것은 데이터를 직렬화 해제하는 프로그램이 원래 원래 직렬화되었던 클래스의 인스턴스를 작성할 수 있어야 함을 의미합니다.
데이터 구조 직렬화는 다양한 목적으로 사용될 수 있습니다 . 개체 정보는 실제 미디어에 저장 될 수 있으므로 모든 개체의 정확한 상태를 프로그램 실행이 중지 된 시점으로 복원 할 수 있습니다. 원격 절차를 실행할 수있는 메시지를 다른 컴퓨터로 전송합니다.
객체 직렬화를 사용하기 전에, 어떤 제한을 이해하는 것이 중요합니다 . 가장 중요한 것은 객체를 바이트 스트림으로 변환하는 과정을 통해 개인으로 선언 된 필드가 노출된다는 것입니다. . 스트림 전송 중에이 데이터를 캡처 및 디코딩하여 보안 허점을 제시 할 수 있습니다. 대부분의 언어는 데이터 직렬화 형식의 외부화를 허용하므로 독점적으로 인코딩이 가능합니다. 이 위험을 완화하는 데 도움이됩니다.
명심해야 할 또 다른 요소는 직렬화가 일반적으로 serial 직렬화 된 객체와 정확히 동일한 객체에서만 작동한다는 것입니다 . 만약 새로운 필드 나 메소드가 객체에 추가 개체의 서명이 변경됩니다. 이것은 저장된 개체가 예외를 발생시키고 원래의 수정되지 않은 개체의 인스턴스가 개체를 복원하려고 시도 할 때까지 데이터를 복구 할 수 없게됨을 의미합니다.