Serialisasi dan Deserialisasi Java
Gambar 1 Proses Serialisasi dan Deserialisasi pada Java |
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:
- Menyimpan atau mempertahankan state dari object.
- Mengirim object antar jaringan seperti diperlihatkan pada gambar 2.
Gambar 2 Keunggulan Serialisasi pada Java |
Serialisasi adalah marker interface yang 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:
- Jika sebuah parent class implement serialisasi interface maka class child tidak dibutuhkan untuk implement tetapi tidak berlaku sebaliknya.
- Hanya anggota non static yang disimpan pada proses serialisasi.
- 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.
- Object constructor tidak akan pernah dipanggil ketika object deserialisasi.
- 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 dan pendeklarasiannya 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 salah satu nilai default 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 kompilator, maka setiap perubahan dalam class atau penggunaan id berbeda mungkin akan berdampak pada serialisasi data tersebut. 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 serialVersionUIDserialver [-classpath classpath] [-show] [classname...]
Contoh:
// Kode Java untuk
// serialisasi dan
// deserialisasi dari sebuah
// object Java
import java.io.*;
class Demo implements java.io.Serializable
{
public int a;
public String b;
/* Default constructor */
public Demo(int a, String b)
{this.a = a;
this.b = b;}
}
class Test{
public static void main(String[] args)
{
Demo object = new Demo(1, "MakandanMakan");
String filename = "file.ser";
/* Serialisasi */
try
{
// menyimpan object dalam
// sebuah file
FileOutputStream file = new FileOutputStream(filename);
ObjectOutputStream out = new ObjectOutputStream(file);
// method untuk serialisasi
// object
out.writeObject(object);
out.close();
file.close();
System.out.println("Object"
+" telah diserialisasi");
}
catch(IOException ex){
System.out.println("IOExcep"
+"tion ditemukan");}
Demo object1 = null;
/* Deserialisasi */
try
{
// membaca object dari sebuah
// file
FileInputStream file = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(file);
// method untuk deserialisasi
// dari object
object1 = (Demo)in.readObject();
in.close();
file.close();
System.out.println("Object"
+" telah dideserialisasi ");
System.out.println("a = "
+object1.a);
System.out.println("b = "
+object1.b);
}
catch(IOException ex){
System.out.println("IOExce"
+"ption ditemukan");}
catch(ClassNotFoundException ex){
System.out.println("ClassN"
+"otFoundException"
+" ditemukan");}
}
}
Object telah dideserialisasi
a = 1
b = MakandanMakan
Contoh:
// Kode Java untuk
// serialisasi dan
// deserialisasi dari sebuah
// object Java
import java.io.*;
class Emp implements Serializable {
private static final long serialversionUID =
129348938L;
transient int a;
static int b;
String name;
int age;
/* Default constructor */
public Emp(String name, int age, int a, int b)
{
this.name = name;
this.age = age;
this.a = a;
this.b = b;
}
}
public class SerialExample {
public static void printdata(Emp object1)
{
System.out.println("name = "
+object1.name);
System.out.println("age = "
+object1.age);
System.out.println("a = "
+object1.a);
System.out.println("b = "
+object1.b);
}
public static void main(String[] args)
{
Emp object = new Emp("ab"
,20, 2, 1000);
String filename = "shubham.txt";
/* Serialisasi */
try {
// menyimpan object ke dalam
// sebuah file
FileOutputStream file = new FileOutputStream (filename);
ObjectOutputStream out = new ObjectOutputStream (file);
// method untuk serialisasi
// dari object
out.writeObject(object);
out.close();
file.close();
System.out.println("Object"
+" telah melakukan"
+" serialisasi data sebe"
+"lum deserialisasi.");
printdata(object);
// nilai dari perubahan
// variabel static
object.b = 2000;
}
catch (IOException ex)
{
System.out.println("IOExce"
+"ption ditemukan");
}
object = null;
/* Deserialisasi */
try {
// membaca object dari sebuah
// file
FileInputStream file = new FileInputStream (filename);
ObjectInputStream in = new ObjectInputStream (file);
// method untuk deserialisasi
// object
object = (Emp)in.readObject();
in.close();
file.close();
System.out.println("Object"
+" telah melakukan"
+" deserialisasi data sete"
+"lahserialisasi.");
printdata(object);
/* System.out.println("z = " + object1.z); */
}
catch (IOException ex) {
System.out.println("IOExcep"
+"tion ditemukan");
}
catch (ClassNotFoundException ex) {
System.out.println("Class"
+"NotFoundException"
+" ditemukan");
}
}
}
name = ab
age = 20
a = 2
b = 1000
Object telah melakukan deserialisasi data setelah serialisasi
name = ab
age = 20
a = 0
b = 2000
5 komentar untuk "Serialisasi dan Deserialisasi Java"
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 yang dimaksud dengna serialisasi dan deserialisasi pada Java?
BalasHapusSerialisasi adalah mekanisme untuk mengubah kondisi suatu object menjadi aliran byte. Sedangkan deserialisasi adalah proses sebaliknya dimana aliran byte digunakan untuk membuat ulang object java yang sebenarnya pada memori komputer.
HapusApa fungsi dari serialisasi pada Java?
BalasHapusSerialisasi pada Java memungkinkan untuk mengkonversi object ke streaming yang dapat dikirim melalui jaringan ataupun disimpan sebagai file pada database untuk digunakan nanti.
HapusSerialisasi biasanya digunakan ketika diperlukan untuk mengirim data user melalui jaringan atau disimpan dalam sebuah file.
BalasHapus