Saya telah membaca cukup banyak artikel tentang Serialization dan bagaimana itu sangat bagus dan hebat tetapi tidak ada argumen yang cukup meyakinkan. Saya bertanya-tanya apakah seseorang benar-benar dapat memberi tahu saya apa yang sebenarnya dapat kita capai dengan membuat serial kelas?
105
Jawaban:
Mari kita definisikan serialisasi terlebih dahulu, lalu kita bisa membahas mengapa serialisasi sangat berguna.
Serialisasi hanya mengubah objek yang ada menjadi array byte. Larik byte ini mewakili kelas objek, versi objek, dan status internal objek. Larik byte ini kemudian dapat digunakan antara JVM yang menjalankan kode yang sama untuk mengirimkan / membaca objek.
Mengapa kami ingin melakukan ini?
Ada beberapa alasan:
Komunikasi: Jika Anda memiliki dua mesin yang menjalankan kode yang sama, dan mereka perlu berkomunikasi, cara mudah bagi satu mesin untuk membuat objek dengan informasi yang ingin dikirim, dan kemudian membuat serial objek itu ke mesin lain. Ini bukan metode terbaik untuk komunikasi, tetapi itu menyelesaikan pekerjaan.
Persistensi: Jika Anda ingin menyimpan status operasi tertentu dalam database, itu dapat dengan mudah diserialkan ke array byte, dan disimpan dalam database untuk pengambilan nanti.
Deep Copy: Jika Anda memerlukan replika yang tepat dari sebuah Objek, dan tidak ingin repot-repot menulis kelas clone () khusus Anda sendiri, cukup membuat serial objek ke byte array, dan kemudian de-serialisasi ke yang lain objek mencapai tujuan ini.
Caching: Benar-benar hanya aplikasi di atas, tetapi terkadang sebuah objek membutuhkan 10 menit untuk membuatnya, tetapi hanya membutuhkan 10 detik untuk membatalkan serialisasi. Jadi, daripada menyimpan objek raksasa di memori, cukup cache ke file melalui serialisasi, dan baca nanti saat diperlukan.
Sinkronisasi Lintas JVM: Serialisasi bekerja di berbagai JVM yang mungkin berjalan pada arsitektur yang berbeda.
sumber
Saat Anda menjalankan aplikasi, semua objeknya disimpan dalam memori (RAM). Saat Anda keluar, memori tersebut akan diklaim kembali oleh sistem operasi, dan program Anda pada dasarnya 'melupakan' semua yang terjadi saat sedang berjalan. Serialisasi memperbaiki hal ini dengan membiarkan aplikasi Anda menyimpan objek ke disk sehingga dapat membacanya kembali saat aplikasi dimulai. Jika aplikasi Anda akan menyediakan cara apa pun untuk menyimpan / berbagi status sebelumnya, Anda memerlukan beberapa bentuk serialisasi.
sumber
Saya dapat berbagi cerita saya dan saya berharap ini akan memberi beberapa ide mengapa serialisasi itu perlu. Namun, jawaban atas pertanyaan Anda sudah sangat detail.
Saya memiliki beberapa proyek yang perlu memuat dan membaca banyak file teks. File-file tersebut berisi kata-kata berhenti, kata kerja biomedis, singkatan-singkatan biomedis, kata-kata yang terhubung secara semantik satu sama lain, dll. Isi dari file-file ini sederhana: kata-kata !
Sekarang untuk setiap proyek, saya perlu membaca kata-kata dari masing-masing file ini dan memasukkannya ke dalam array yang berbeda; karena konten file tidak pernah berubah, itu menjadi tugas yang umum, betapapun mubazirnya, setelah proyek pertama.
Jadi, yang saya lakukan adalah membuat satu objek untuk membaca masing-masing file ini dan mengisi array individu (variabel instan objek). Kemudian saya membuat serial objek dan kemudian untuk proyek selanjutnya, saya hanya men-deserialisasi mereka. Saya tidak perlu membaca file dan mengisi array lagi dan lagi.
sumber
Intinya :
Lihat penggunaan dari Wiki :
Serialisasi memiliki sejumlah keunggulan. Ini menyediakan:
sumber
Yang paling jelas adalah Anda dapat mengirimkan kelas berseri melalui jaringan, dan penerima dapat membuat duplikat dari instanstance asli. Demikian pula, Anda dapat menyimpan struktur berseri ke sistem file.
Juga, perhatikan bahwa serialisasi bersifat rekursif, sehingga Anda dapat membuat serialisasi seluruh struktur data heterogen dalam satu gelombang besar, jika diinginkan.
sumber
Objek berseri mempertahankan status di ruang angkasa, mereka dapat ditransfer melalui jaringan, sistem file, dll ... dan waktu, mereka dapat hidup lebih lama dari JVM yang membuatnya.
Terkadang ini berguna.
sumber
Saya menggunakan objek serial untuk menstandarisasi argumen yang saya berikan ke fungsi atau konstruktor kelas. Meneruskan satu kacang berseri jauh lebih bersih daripada daftar panjang argumen. Hasilnya adalah kode yang lebih mudah dibaca dan di-debug.
sumber
Untuk tujuan pembelajaran yang sederhana (perhatikan, saya mengatakan belajar, saya tidak mengatakan yang terbaik, atau bahkan bagus, tetapi hanya untuk memahami hal-hal), Anda dapat menyimpan data Anda ke file teks di komputer, kemudian memiliki program yang membaca info itu, dan berdasarkan file tersebut, program Anda bisa merespons secara berbeda. Jika Anda lebih mahir, itu tidak harus berupa file txt, tetapi sesuatu yang lain.
Serialisasi di sisi lain, menempatkan sesuatu secara langsung ke dalam bahasa komputer. Ini seperti Anda memberi tahu komputer Spanyol sesuatu dalam bahasa Spanyol, daripada mengatakan sesuatu dalam bahasa Prancis, memaksanya untuk belajar bahasa Prancis, lalu menyimpan sesuatu ke dalam bahasa aslinya Spanyol dengan menerjemahkan semuanya. Bukan jawaban yang paling intensif teknologi, saya hanya mencoba membuat contoh yang dapat dimengerti dalam format bahasa yang umum.
Serialisasi juga lebih cepat, karena di Java, objek ditangani di heap, dan memakan waktu lebih lama daripada jika direpresentasikan sebagai primitif di tumpukan. Kecepatan, kecepatan, kecepatan. Dan lebih sedikit pemrosesan file dari sudut pandang programmer.
sumber