Apa perbedaan antara marshaller dan serializer?

20

... dan tidak membuat kesalahan / deserializing? Penjelasan Wikipedia membuat saya tidak bijak! Saya seorang programmer Java, jika terminologi digunakan secara berbeda dalam bahasa yang berbeda.

busa
sumber

Jawaban:

30

Semantik penting di sini:

Marshalling menyiratkan memindahkan data, itu tidak berarti mengubah data dari representasi atau penyimpanan aslinya. Java Objects dapat di-Marshalled melalui kabel dalam representasi asli mereka.

Serialisasi berarti mentransformasikan data ke beberapa representasi perantara non-pribumi. Sebagai contoh: mengubah Obyek Java ke JSON atau XML.

Tentu saja, sebagian besar sistem data Marshal , Serialize ke beberapa format non-asli sebelum mereka mengangkutnya.

JimmyJames
sumber
13

Pertanyaan ini telah ditanyakan sebelumnya, tetapi pada StackOverflow. Inilah tautannya.

Kutipan dari jawaban yang diberikan oleh Jeffrey Hantin :

Marshaling dan serialisasi secara longgar identik dalam konteks panggilan prosedur jarak jauh, tetapi secara semantik berbeda sebagai soal niat.

Secara khusus, marshaling adalah tentang mendapatkan parameter dari sini ke sana, sementara serialisasi adalah tentang menyalin data terstruktur ke atau dari bentuk primitif seperti aliran byte. Dalam hal ini, serialisasi adalah salah satu cara untuk melakukan marshaling, biasanya menerapkan semantik nilai-demi-nilai.

Dimungkinkan juga untuk objek yang akan disusun dengan referensi, dalam hal ini data "pada kabel" hanyalah informasi lokasi untuk objek asli. Namun, objek seperti itu mungkin masih bisa menerima nilai serialisasi.

Seperti yang disebutkan oleh @Bill, mungkin ada metadata tambahan seperti lokasi basis kode atau bahkan kode implementasi objek.

alegen
sumber
2

Seorang Marshaller melakukan apa pun yang perlu dilakukan, untuk melemparkan struktur data untuk diangkut dari satu tempat ke tempat lain. Ketika saya berbicara tentang "Struktur Data" itu bisa apa saja. Dari objek itu sendiri (sebutkan data = nilai bidang) ke referensi memori ke objek yang akan ditangani sisi klien oleh "Stub" dan di sisi server oleh "Proxy". Ini berarti bahwa Marshaller dapat menggunakan "Serializers" untuk mengubah struktur data menjadi representasi tingkat rendah yang lebih mudah untuk diangkut. Jalur transformasi dapat memiliki komponen lain seperti Kompresor, Kompiler, Adaptor dll. Bagi saya, Serializer adalah bagian dari Marshaller.

HABOT QDroid
sumber