Jumat, Mei 24, 2019

Serialisasi dan Deserialisasi pada Java beserta Contoh

Serialisasi adalah mekanisme mengkonversi state dari object menjadi sebuah byte stream. Deserialisasi adalah proses kebalikan dimana byte stream digunakan untuk membuat ulang object nyata pada memori. Mekanisme ini digunakan untuk membertahankan object yang digunakan seperti terlihat pada gambar 1.

serialisasi dan deserialisasi pada java
Gambar 1 serialisasi dan deserialisasi Java
sumber : geeksforgeeks.org

Byte stream yang diciptakan bersifat independen platform. Sehingga, serialisasi object dalam satu platform dapat dideserialisasi dalam berbagai platform berbeda.

Untuk membuat sebuah object Java dilakukan implement java.io.Serializable interface. Class ObjectOutputStream mengandung method writeObject() untuk serialisasi object.

public final void writeObject(Object obj)
                       throws IOException

class ObjectInputStream mengandung method readObject() untuk deserialisasi pada object.

public final Object readObject()
                  throws IOException,
               ClassNotFoundException


Keunggulan serialisasi
satu, Menyimpan atau mempertahankan state dari object.
dua, Mengirim object antar jaringan seperti diperlihatkan pada gambar 2.

keunggulan serialisasi pada bahasa pemrograman Java
Gambar 2 keunggulan serialisasi
sumber : geeksforgeeks.org

Hanya object dari class itu sendiri yang dapat diserialisasi yang di-implement pada interface java.io.Serializable.

Serialisasi adalah marker interface (tidak memiliki anggota data dan method). Interface ini digunakan untuk "mark" class Java sehingga object dari class tersebut mungkin mendapatkan kemampuan tertentu. Contoh lainnya dari marker interface adalah: -Cloneable dan Remote.

Hal yang perlu diingat
satu, Jika sebuah parent class implement serialisasi interface maka class child tidak dibutuhkan untuk implement tetapi tidak berlaku sebaliknya.
dua, Hanya anggota non static yang disimpan pada proses serialisasi.
tiga, Anggota static data dan transient data yang tidak disimpan menggunakan proses serialisasi. Sehingga, jika tidak ingin disimpan nilai dari anggota data non static maka buatlah ke dalam bentuk data transient.
empat, Object constructor tidak akan pernah dipanggil ketika object dideserialisasi.
lima, Object asosiasi harus implement interface serialisasi.

Contoh:
class A implements Serializable{

// B also implements Serializable
// interface.
B ob=new B();  
}

SerialVersionUID
Runtime serialisasi menghubungkan nomor versi dengan setiap class serialisasi yang disebut SerialVersionUID, yang digunakan selama Deserialisasi untuk memperifikasi bahwa pengirim dan penerima dari object serialisasi memiliki class loaded untuk object-nya yang compatible dengan serialisasi terkait. Jika penerima memiliki sebuah class loaded untuk object yang memiliki UID berbeda, maka class pengirim yang sesuai (deserialisasi) akan memberikan hasil dalam InvalidClassException. Sebuah class serialisasi dapat mendeklarasikan UID nya sendiri secara eksplisit dengan cara pendeklarasian nama sebuah nama field.

Pendeklarasian harus dalam bentuk static, final, dan dengan tipe data long.

yaitu ANY-ACCESS-MODIFIER static final long serialVersionUID=42L;

Jika sebuah class serialisasi secara eksplisit tidak mendeklarasikan sebuah serialVersionUID, maka runtime serialisasi akan mengkalkulasi sebuah default one untuk class tersebut berdasarkan berbagai aspek dari class, yang dideskripsikan dalam Spesifikasi Serialisasi Object Java. Bagaimanapun, sangat direkomendasikan bahwa semua class serialisasi secara eksplisit mendeklarasikan nilai serialVersionUID, sejak proses komputasi yang menjadi sangat sensitif terhadap detail class yang mungkin bervariasi tergantung implementasi compiler, setiap perubahan dalam class atau penggunaan id berbeda mungkin akan berdampak pada serialisasi data.

Juga direkomendasikan untuk menggunakan modifier private untuk UID sejak UID tidak terlalu berguna sebagai anggota pewarisan (inherit).

serialver
Serialver adalah perangkat yang terdapat pada JDK yang digunakan untuk mendapatkan serialVersionUID number untuk class Java.

Dapat juga dijalankan perintah berikut untuk mendapatkan serialVersionUID

serialver [-classpath classpath] [-show] [classname...]

seperti diperlihatkan pada gambar 3 berikut ini

perintah pemanggilan serialVersionUID pada bahasa pemrograman Java
Gambar 3 perintah pemanggilan serialVersionUID
sumber : geeksforgeeks.org

Contoh 1:
Output:
Object has been serialized
Object has been deserialized 
a = 1
b = geeksforgeeks

Contoh 2
Output:
Object has been serialized
Data before Deserialization.
name = ab
age = 20
a = 2
b = 1000
Object has been deserialized
Data after Deserialization.
name = ab
age = 20
a = 0
b = 2000





Tidak ada komentar:

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D