Lompat ke konten Lompat ke sidebar Lompat ke footer

Serialisasi dan Deserialisasi Java

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.

Proses Serialisasi dan Deserialisasi pada Java
Gambar 1 Proses Serialisasi dan Deserialisasi pada Java

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 interfaceClass 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.

Keunggulan Serialisasi pada Java
Gambar 2 Keunggulan Serialisasi pada Java

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

Serialisasi adalah marker interface yang tidak memiliki anggota data dan methodInterface ini digunakan untuk "markclass 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 staticfinal, 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 serialVersionUID

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

Contoh 1:

// 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");} 

}

 

}

Output:
Object telah diserialisasi
Object telah dideserialisasi
a = 1
b = MakandanMakan

Contoh 2:

// 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"); 

}

 

}

 

}

Output:
Object telah melakukan serialisasi data sebelum deserialisasi
name = ab
age = 20
a = 2
b = 1000
Object telah melakukan deserialisasi data setelah serialisasi
name = ab
age = 20
a = 0
b = 2000

Artikel ini didedikasikan kepada: Adinda Geulis Widyapuspa, Adzani Ayu Andini, Agus Nurul Mustofa, Agus Trianto, dan Ahmad Hafizhuddin Auzan.

5 komentar untuk "Serialisasi dan Deserialisasi Java"

  1. Apa yang dimaksud dengna serialisasi dan deserialisasi pada Java?

    BalasHapus
    Balasan
    1. Serialisasi 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.

      Hapus
  2. Apa fungsi dari serialisasi pada Java?

    BalasHapus
    Balasan
    1. Serialisasi pada Java memungkinkan untuk mengkonversi object ke streaming yang dapat dikirim melalui jaringan ataupun disimpan sebagai file pada database untuk digunakan nanti.

      Hapus
  3. Serialisasi biasanya digunakan ketika diperlukan untuk mengirim data user melalui jaringan atau disimpan dalam sebuah file.

    BalasHapus

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 -