Object Serialisasi Java Terhadap Inheritance
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.// Program Java
// mendemonstrasikan bahwa
// jika superclass serialisasi
// maka subclass secara
// otomatis juga dapat
// dilakukan serialisasi.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/* superclass A */
// implementasi Serialisasi
// interface.
class A implements Serializable
{
int i;
// parameterisasi constructor.
public A(int i)
{this.i = i;}
}
/* subclass B */
// B class tidak implement
// Serialisasi interface.
class B extends A
{
int j;
// parameterisasi constructor.
public B(int i, int j)
{super(i);
this.j = j;}
}
/* Driver class */
public class Test
{
public static void main(String[] args)
throws Exception{
B b1 = new B(10,20);
System.out.println("i = "
+b1.i);
System.out.println("j = "
+b1.j);
// Serialisasi B (subclass)
// object.
// menyimpan object ke dalam
// sebuah file.
FileOutputStream fos = new FileOutputStream("abc.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// method untuk serialisasi
// dari class B object.
oos.writeObject(b1);
/* closing streams */
oos.close();
fos.close();
System.out.println("Object"
+" telah diserialisasi");
// De-Serialisasi B (subclass)
// object.
// membaca object dari sebuah
// file.
FileInputStream fis = new FileInputStream("abc.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
// method untuk de-serialisasi
// dari B class object.
B b2 = (B)ois.readObject();
/* closing streams */
ois.close();
fis.close();
System.out.println("Object"
+" telah dideserialisasi");
System.out.println("i = "
+b2.i);
System.out.println("j = "
+b2.j);}
}
j = 20
Object telah diserialisasi
Object telah dideserialisasi
i = 10
j = 20
- 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.
- Deserialisasi, Pada saat dilakukan serialisasi, jika terdapat non serialisasi, maka JVM akan mengeksekusi instance control flow dalam superclass. Sehingga, untuk mengeksekusi instance control flow dalam sebuah class, maka JVM akan selalu memanggil constructor default yang tidak berargumen dari class tersebut. Sehingga, setiap superclass non serialisasi harus mengandung constructor default, jika tidak maka akan didapat runtime-exception.
// Program Java
// mendemonstrasikan kasus
// jika superclass tidak harus
// bisa serialisasi saat
// dilakukan proses
// serialisasi pada subclass.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;;
/* superclass A */
// sebuah class tidak
// memerlukan implementasi
// serialisasi interface.
class A
{
int i;
// parameterisasi constructor.
public A(int i)
{this.i = i;}
/* default constructor */
// constructor ini harus
// ditampilkan, jika tidak
// maka akan didapati runtime
// exception.
public A()
{i = 50;
System.out.println("class"
+" constructor A dipanggil");}
}
/* subclass B */
// implementasi serialisasi
// interface.
class B extends A implements Serializable
{
int j;
// parameterisasi constructor.
public B(int i,int j)
{super(i);
this.j = j;}
}
/* Driver class */
public class Test
{
public static void main(String[] args)
throws Exception
{B b1 = new B(10,20);
System.out.println("i = "
+b1.i);
System.out.println("j = "
+b1.j);
// Serialisasi B (subclass)
// object.
// menyimpan object ke dalam
// sebuah file.
FileOutputStream fos = new FileOutputStream("abc.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// method untuk serilasisasi
// dari B class object.
oos.writeObject(b1);
/* closing streams */
oos.close();
fos.close();
System.out.println("Object"
+" telah diserialisasi");
// De-Serialisasi B (subclass)
// object.
// Membaca object dari sebuah
// file.
FileInputStream fis = new FileInputStream("abc.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
// Method untuk de-serialisasi
// dari B class object.
B b2 = (B)ois.readObject();
/* closing streams */
ois.close();
fis.close();
System.out.println("Object"
+" telah dideserialisasi");
System.out.println("i = "
+b2.i);
System.out.println("j = "
+b2.j);
}
}
j = 20
Object telah diserialisasi
class constructor A dipanggil
Object telah dideserialisasi
i = 0
j = 20
// Program Java
// mendemonstrasikan bagaiman
// cara mencegah subclass dari
// serialisasi.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/* superclass A */
// implementasi serialisasi
// interface.
class A implements Serializable
{
int i;
// parameterisasi constructor.
public A(int i)
{this.i = i;}
}
/* subclass B */
// class B tidak implement
// serialisasi interface.
class B extends A
{
int j;
// parameterisasi constructor.
public B(int i,int j)
{super(i);
this.j = j;}
// dengan mengimplementasikan
// method writeObject, dapat
// dilakukan pencegahan
// subclass untuk melakukan
// serialisasi.
private void writeObject(ObjectOutputStream out) throws IOException
{throw new NotSerializableException();}
// dengan mengimplementasikan
// method readObject, dapat
// dilakukan pencegahan
// subclass untuk melakukan
// deserialisasi.
private void readObject(ObjectInputStream in) throws IOException
{throw new NotSerializableException();}
}
/* Driver class */
public class Test
{
public static void main(String[] args)
throws Exception{
B b1 = new B(10, 20);
System.out.println("i = "
+b1.i);
System.out.println("j = "
+b1.j);
// Serialisasi B (subclass)
// object.
// menyimpan object dalam
// sebuah file.
FileOutputStream fos = new FileOutputStream("abc.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// method untuk serialisasi
// dari object class B.
oos.writeObject(b1);
/* closing streams */
oos.close();
fos.close();
System.out.println("Object telah diserialisasi");
// DeSerialisasi B (subclass)
// object.
// Membaca object dari sebuah
// file.
FileInputStream fis = new FileInputStream("abc.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
// method untuk de-serialisasi
// dari object class B.
B b2 = (B)ois.readObject();
/* closing streams */
ois.close();
fis.close();
System.out.println("Object"
+" telah dideserialisasi");
System.out.println("i = "
+b2.i);
System.out.println("j = "
+b2.j);}
}
5 komentar untuk "Object Serialisasi Java Terhadap Inheritance"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apa fungsi serialisasi pada Java?
BalasHapusSerialisasi pada Java memungkinkan user untuk melakukan perubahan object menjadi stream yang dapat dikirim melaui jaringan atau menyimpannya sebagai file atau database untuk digunakan nanti.
HapusApa fungsi deserialisasi pada Java?
BalasHapusDeserialisasi adalah proses mengubah aliran object atau stream object menjadi object Java yang sebenarnya untuk digunakan dalam suatu program.
HapusSerialisasi menyediakan cara dimana suatu object dapat direpresentasikan sebagai suatu urutan byte yang mencakup data dan informasi object yang memiliki tipe object dan tipe data yang disimpan dalam suatu object pada Java. Dimana object tersebut hanya dapat dibaca dari file setelah object serial ditulis ke dalam file.
BalasHapus