Apa itu Serialisasi?

8

Saya telah sekitar pemrograman untuk sementara waktu sebagai hobi, tetapi saya tidak mulai melihat konsep ini sampai saat ini. Saya telah google'd "apa itu serialisasi" berkali-kali, tetapi saya tidak pernah benar-benar mendapatkan definisi, biasanya hanya contoh bagaimana melakukannya. Saya melihatnya di sekitar forum Ogre, forum Bullet, dan setiap forum lain yang saya kunjungi, jadi saya pikir sudah saatnya saya benar-benar mengerti apa itu, dan mengapa menggunakannya.

Edit

Untuk memperjelas, saya mencari lebih banyak mengapa menggunakannya, terutama dalam arti pemrograman game. Sebagai contoh, Bullet Physics API banyak berbicara tentang membuat serial sebuah mesh, jadi saya ingin mengerti mengapa itu terjadi.

Terima kasih :)

Aidan Knight
sumber

Jawaban:

7

Dari dokumentasi boost.serialization : Di sini, kami menggunakan istilah "serialisasi" yang berarti dekonstruksi reversibel dari sekumpulan struktur data C ++ yang sewenang-wenang ke urutan byte. Sistem seperti itu dapat digunakan untuk menyusun kembali struktur yang setara dalam konteks program lain. Tergantung pada konteksnya, ini mungkin menggunakan objek persistence, passing parameter jarak jauh atau fasilitas lainnya. Dalam sistem ini kami menggunakan istilah "arsip" untuk merujuk pada rendering spesifik dari aliran byte ini. Ini bisa berupa file data biner, data teks, XML, atau lainnya yang dibuat oleh pengguna perpustakaan ini.

Dengan kata lain, serialisasi adalah setiap proses yang mengubah objek dalam memori menjadi semacam bytestream, dan deserialisasi melakukan sebaliknya, mengambil bytestream dan mengubahnya kembali menjadi objek dalam memori.

Istilah "serialisasi" tidak menyiratkan apa pun tentang format bytestream. Ini mungkin format biner yang dikemas secara efisien, atau deskripsi XML atau YAML yang longgar. Bahkan mungkin kode sumber dalam bahasa asli itu sendiri, atau dalam bahasa pemrograman lain, seperti JSON , yang merupakan bagian dari JavaScript. Format yang tepat dari aliran serial harus dipilih berdasarkan pada bagaimana Anda bermaksud menggunakannya.

Serialisasi adalah fitur bawaan dari banyak bahasa dan lingkungan - misalnya Java dan Python . Dalam bahasa tingkat rendah seperti C dan C ++, seseorang harus menggunakan (atau menulis) pustaka serialisasi , karena mekanisme yang disediakan oleh bahasa biasanya tidak cukup baik - ia tidak dapat mengikuti atau membuat serial petunjuk dan referensi, dan tunduk pada masalah endianness, karena contoh.

Wikipedia memiliki artikel yang layak tentang serialisasi.

Serialisasi digunakan secara luas dalam game (dan semua perangkat lunak) untuk banyak tujuan:

  • Memuat daftar semua mantra dalam game dari file sumber daya.
  • Menyimpan dan memuat game.
  • Merekam keadaan hal-hal (misalnya posisi pemain dan inventaris) ke SQL atau database objek.
  • Menjalankan panggilan fungsi jarak jauh melalui jaringan atau tautan IPC lainnya.
Komunitas
sumber
6

Seperti yang saya pahami, serialisasi hanyalah konsep mengambil objek atau sekumpulan objek, mengubahnya menjadi aliran byte (untuk penyimpanan data, atau transmisi jaringan, dll.) Dan kemudian merekonstruksi objek asli dari bytestream (" deserialisasi ").

Aneh: Ini agak seperti teleporter Star Trek, sekarang saya memikirkannya.

Sejumlah perpustakaan ada untuk ini, masing-masing berurusan dengan orang-orang kecil yang cenderung menghalangi (seperti bytestream endianness dan semacamnya).

Kaz Dragon
sumber
Ini masuk akal, dan saya sangat menyukai analogi teleporter, yang pasti membantu memahaminya lol. Menggunakan serialisasi untuk jaringan masuk akal bagi saya, tetapi menggunakannya di tempat lain, seperti mesin Bullet Physics dan ada format .bullet, saya tidak mengerti di mana ia digunakan di sana.
Aidan Knight
Untuk lebih memperjelas kebingungan saya, saya menemukan tutorial sederhana ini codeproject.com/KB/cpp/serialization_primer1.aspx dan pada Langkah 3, itu menunjukkan serialisasi data ke file. Saya tidak mengerti bagaimana itu berbeda dari hanya menulis teks ke file menggunakan fopen / fwrite, dll.
Aidan Knight
Serialisasi adalah proses mengubah objek dalam perangkat lunak Anda menjadi teks yang dapat Anda sampaikan ke fwrite (atau pembaca / penulis berorientasi bytestream lain yang Anda butuhkan).
3

Membuat cerita bersambung pada dasarnya berarti mengubahnya menjadi sebuah seri. Ini diperlukan jika Anda ingin mengirim sesuatu melalui jaringan atau menulisnya ke file, karena keduanya mengharapkan serangkaian byte. Jadi itu umumnya istilah mewah untuk sistem simpan dan muat. Dalam kasus Bullet, itu hanya mengambil data mesh dan menyimpannya dalam bentuk yang dapat digunakan secara efektif oleh Bullet. Anda dapat menyimpan ini dan memuatnya nanti tanpa perlu menganalisis ulang jerat Anda.

Kylotan
sumber
0

Serialize / De-serialize hanya menyiapkan dan menulis / membaca objek ke / dari disk.

WernerCD
sumber
-3

Saya pribadi menggunakan serialisasi untuk jaringan. Di luar itu saya tidak punya banyak kegunaan untuk itu. Jika Anda ingin tahu mengapa itu digunakan dalam Bullet, peluang terbaik yang Anda miliki untuk mendapatkan jawaban adalah dengan bertanya di forum Bullet atau membaca dokumentasi.

Perangkat Tidak Dikenal
sumber