Jumat, Mei 24, 2019

Object Serialisasi dengan Inheritance pada Java

Prasyarat pengetahuan : Serialisasi dan Deserialisasi pada Java beserta Contoh, Inheritance pada Java

Serialisasi adalah mekanisme untuk mengkonversi state dari object menjadi byte stream. Deserialisasi adalah kebalikan dari proses dimana byte stream akan digunakan untuk membuat ulang object Java yang sesungguhnya pada memori. Mekanisme digunakan untuk mempertahankan object.

Beberapa kasus serialisasi yang berhubungan dengan inheritance.

Satu, Jika superclass dapat dilakukan serialisasi maka subclass secara otomatis juga dapat dilakukan serialisasi. Jika superclass dapat dilakukan serialisasi, maka secara otomatis setiap subclass dapat dilakukan serialisasi. Karena itu, meskipun subclass tidak implement interface serialisasi (dan jika superclass-nya implement serialisasi), maka dapat dilakukan serialisasi object subclass.

Output:
i = 10
j = 20
Object has been serialized
Object has been deserialized
i = 10
j = 20

object serialisasi pada bahasa pemrograman Java
Gambar 1 object serialisasi pada Java
sumber : geeksforgeeks.org

dua, Jika sebuah superclass tidak dapat melakukan serialisasi maka subclass tetap dapat melakukan serialisasi: meskipun superclass tidak implement interface serialisasi, subclass tetap dapat melakukan serialisasi object jika subclass itu implement serialisasi interface. Jadi, untuk dapat melakukan serialisasi subclass object, superclass tidak perlu dilakukan serialisasi. Tetapi bagaimana jika dengan instance dari superclass selama serialisasi?

Apa yang terjadi jika sebuah class dapat dilakukan serialisasi tetapi superclass tidak dapat dilakukan serialisasi?
pertama, Serialisasi, Pada saat dilakukan serialisasi, jika variabel instance diwariskan dari non serialisasi superclass, maka JVM akan mengacuhkan nilai asli dari variabel instance dan menyimpan nilai default dari file.
kedua, Deserialisasi, Pada saat dilakukan serialisasi, jika terdapat non serialisasi, maka JVM akan mengeksekusi instance control flow dalam superclass. Untuk mengeksekusi instance control flow dalam sebuah class, JVM akan selalu memanggil constructor default (tidak ada argumen) dari class tersebut. Sehingga, setiap superclass non serialisasi harus mengandung constructor default, jika tidak maka akan didapat runtime-exception.

Output:
i = 10
j = 20
Object has been serialized
A's class constructor called
Object has been deserialized
i = 0
j = 20

Jika superclass tidak dilakukan serialisasi tetapi subclass tetap dapat dilakukan serialisasi pada bahasa pemrograman Java
Gambar 2 Jika superclass tidak dilakukan serialisasi tetapi subclass tetap dapat dilakukan serialisasi
sumber : geeksforgeeks.org

tiga, Jika superclass dapat dilakukan serialisasi tetapi tidak untuk subclass-nya:
Tidak ada cara langsung untuk mencegah subclass dari serialisasi pada Java. Satu cara yang mungkin adalah dimana seorang programmer dapat mencapainya dengan cara implementasi writeObject() dan readObject() method pada subclass dan perlu dilemparkan NotSerializableException dari method tersebut. Method tersebut akan dieksekusi selama serialisasi dan deserialisasi secara berurutan. Dengan overriding method tersebut, dapat diimplementasikan costum serialisasi.

Output:
i = 10
j = 20
Exception in thread "main" java.io.NotSerializableException
at B.writeObject(Test.java:44)





Tidak ada komentar:

Posting Komentar

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

Footer Adsense