Analisis Algoritma Serialisasi Java
Serialisasi adalah proses mendeskripsikan suatu objek sebagai serangkaian byte; deserialisasi adalah proses merekonstruksi byte-byte tersebut menjadi suatu objek. Java Serialization API menyediakan mekanisme standar untuk menangani serialisasi objek. Di sini Anda dapat mempelajari cara membuat serialisasi suatu objek, kapan serialisasi diperlukan, dan algoritma serialisasi Java. Kami menggunakan contoh untuk menunjukkan bagaimana byte setelah serialisasi menggambarkan informasi suatu objek.
Kebutuhan akan serialisasi
Di Java, semuanya adalah sebuah objek. Dalam lingkungan terdistribusi, seringkali diperlukan untuk mentransfer Objek dari satu jaringan atau perangkat ke jaringan atau perangkat lainnya. Hal ini memerlukan protokol yang dapat mengirimkan data pada kedua ujungnya. Mekanisme serialisasi Java diciptakan untuk mengatasi masalah ini.
Cara membuat serialisasi suatu objek
Prasyarat agar suatu objek dapat diserialkan adalah mengimplementasikan antarmuka Serializable. Antarmuka Serializable tidak memiliki metode dan lebih mirip penanda. Kelas dengan tag ini dapat diproses dengan mekanisme serialisasi.
100.
Format serialisasi objek
Seperti apa bentuk objek setelah diserialkan? Buka file temp.out yang baru saja kita serialkan dan hasilkan objeknya, dan tampilkan dalam heksadesimal. Kontennya harus sebagai berikut:
73 74 A0 0C 34 00 FE B1 DD F9 02 00 02 42 00 05
63 6F 75 6E 74 42 00 07 76 65 72 73 69 6F 6E 78
70 00 64
versi byte publik = 100;
jumlah byte publik = 0;
Keduanya bertipe byte. Secara teori, hanya diperlukan 2 byte untuk menyimpan kedua field ini, namun nyatanya temp.out menempati 51 byte, artinya selain data, juga mencakup deskripsi lain dari objek serial.
Algoritma serialisasi Java
Algoritma serialisasi umumnya melakukan langkah-langkah berikut:
◆Metadata kelas keluaran yang terkait dengan instance objek.
◆Output deskripsi superclass dari kelas tersebut secara rekursif hingga tidak ada lagi superclass.
◆Setelah metadata kelas selesai, nilai data aktual dari instance objek dikeluarkan mulai dari superclass tingkat atas.
◆Menghasilkan data instance secara rekursif dari atas ke bawah
Mari kita ilustrasikan dengan contoh lain yang mencakup lebih lengkap semua kemungkinan situasi:
kelas berisi implementasi Serializable{
int berisiVersi = 11;
}
kelas publik SerialTest memperluas implementasi induk Serializable {
versi int = 66;
mengandung con = baru mengandung();
publik int getVersion() {
versi pengembalian;
}
public static void main(String args[]) melempar IOException {
FileOutputStream fos = new FileOutputStream("temp.out");
ObjectOutputStream oos = ObjectOutputStream baru(fos);
SerialTest st = SerialTest baru();
oos.writeObject(st);
oos.flush();
oos.close();
}
}
Format serialnya adalah sebagai berikut:
AC ED 00 05 7372 00 0A 53 65 72 69 61 6C 54 65
73 74 05 52 81 5A AC 66 02 F6 02 00 0249 00 07
76 65 72 73 69 6F 6E4C00 03 63 6F 6E74 00 09
4C63 6F 6E 74 61 69 6E 3B 7872 00 06 70 61 72
65 6E 74 0E DB D2 BD 85 EE 63 7A 02 00 0149 00
0D 70 61 72 65 6E 74 56 65 72 73 69 6F 6E 78 70
0000000A 0000004273 72 00 07 63 6F 6E 74
61 69 6E FC BB E6 0E FB CB 60 C7 02 00 0149 00
0E 63 6F 6E 74 61 69 6E 56 65 72 73 69 6F 6E 78
700000000B
Mari kita lihat lebih dekat apa yang diwakili oleh byte-byte ini. Awal, lihat warna:
Langkah pertama dalam algoritma serialisasi adalah mengeluarkan deskripsi kelas objek yang terkait. Objek yang ditampilkan dalam contoh adalah turunan dari kelas SerialTest, sehingga deskripsi kelas SerialTest akan ditampilkan berikutnya. Lihat warna:
Selanjutnya, algoritma mengeluarkan salah satu bidang, inversion=66;
Kemudian, algoritme mengeluarkan domain berikutnya, mengandung con = new mengandung(); ini agak istimewa, ini adalah sebuah objek. Saat mendeskripsikan referensi tipe objek, Anda perlu menggunakan notasi tanda tangan objek standar JVM, lihat warna:
.Kemudian algoritma akan menampilkan deskripsi kelas super, yaitu kelas Induk. Lihat warnanya:
Selanjutnya, tampilkan deskripsi domain kelas induk, intparentVersion=100; lihat juga warna:
Sejauh ini, algoritme telah mengeluarkan deskripsi semua kelas. Langkah selanjutnya adalah menampilkan nilai sebenarnya dari objek instance. Saat ini dimulai dari domain Kelas induk, lihat warna:
Ada juga bidang kelas SerialTest:
Byte berikutnya lebih menarik. Algoritme perlu mendeskripsikan informasi dari kelas isi. Ingat, kelas isi belum dijelaskan. Lihat warnanya:
.Keluarkan deskripsi domain unik dari konten, intcontainVersion=11;
Saat ini, algoritme serialisasi akan memeriksa apakah konten memiliki superkelas, dan jika demikian, ia akan mengeluarkannya.
Terakhir, nilai domain sebenarnya dari kelas isi adalah keluaran.
Oke, kita sudah membahas tentang mekanisme dan prinsip serialisasi java, semoga bermanfaat bagi para mahasiswa.