마샬 러와 시리얼 라이저의 차이점은 무엇입니까?


20

... 그리고 비 정렬 화 / 역 직렬화? Wikipedia의 설명 은 나를 더 현명하게 만듭니다! 용어가 다른 언어로 다르게 사용되는 경우를 대비하여 Java 프로그래머입니다.

답변:


30

여기서 의미론이 중요합니다.

마샬링 은 데이터 이동을 의미하며 데이터를 기본 표현이나 스토리지에서 변환하지는 않습니다. Java 객체는 기본 표현으로 와이어를 통해 마샬링 될 수 있습니다.

직렬화 는 데이터를 비 기본 중간 표현으로 변환 하는 것을 의미 합니다. 예를 들어, Java 오브젝트를 JSON 또는 XML로 변환합니다.

물론 데이터 를 마샬링 하는 대부분의 시스템은 데이터 를 전송하기 전에 비원시 형식으로 직렬화 합니다.


13

이 질문은 이전에 요청되었지만 StackOverflow에 있습니다. 여기 링크가 있습니다.

Jeffrey Hantin 의 답변 인용 :

마샬링 및 직렬화는 원격 프로 시저 호출의 맥락에서 느슨하게 동의하지만 의도적으로 의미 상 다릅니다.

특히, 마샬링은 여기에서 거기로 매개 변수를 가져 오는 것이지만 직렬화는 구조화 된 데이터를 바이트 스트림과 같은 기본 형식으로 복사하는 것입니다. 이러한 의미에서 직렬화는 마샬링을 수행하는 수단 중 하나이며 일반적으로 값별 의미를 구현합니다.

객체가 참조에 의해 마샬링 될 수도 있으며,이 경우 "와이어상의"데이터는 단순히 원래 객체에 대한 위치 정보이다. 그러나 이러한 개체는 여전히 직렬화를 중요하게 생각할 수 있습니다.

@Bill이 언급했듯이 코드 기반 위치 또는 객체 구현 코드와 같은 추가 메타 데이터가있을 수 있습니다.


2

Marshaller는 데이터 구조를 한 곳에서 다른 곳으로 옮길 수 있도록 필요한 모든 작업을 수행합니다. "데이터 구조"에 관해 이야기 할 때 그것은 무엇이든 될 수 있습니다. 객체 자체 (상태 데이터 => 필드 값)에서 클라이언트 측이 "스텁"으로, 서버 측에서 "프록시"로 처리 될 해당 객체에 대한 메모리 참조까지. 이는 Marshaller가 "Serializers"를 사용하여 해당 데이터 구조를 전송하기 훨씬 쉬운 저수준 표현으로 변환 할 수 있음을 의미합니다. 변환 경로에는 Compressors, Compilers, Adapters 등과 같은 다른 구성 요소가있을 수 있습니다. Serializer는 Marshaller의 일부입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.