Java - Serialisasi
Halo para ahli Java masa depan! Hari ini, kita akan memulai perjalanan yang menarik ke dunia Java Serialisasi. Jangan khawatir jika Anda baru mengenal pemrograman – saya akan menjadi pemandu yang ramah, dan kita akan melakukannya langkah demi langkah. Pada akhir tutorial ini, Anda akan bisa menserialisasi objek seperti seorang professional!
Apa Itu Serialisasi?
Sebelum kita melompat ke kode, mari kita mengerti apa itu serialisasi. Bayangkan Anda punya sandwich yang lezat (objek dalam istilah Java) yang ingin Anda kirim ke teman Anda melalui surat. Anda tidak bisa langsung memasukkan sandwich keseluruhan ke dalam Amplop, kan?INSTEAD, Anda perlu membrokeknya menjadi bahan-bahan, menulisnya di atas kertas, dan mengirimkannya. Ketika teman Anda menerima itu, mereka dapat membuat sandwich kembali menggunakan instruksi. Proses ini dari membrokekkan objek menjadi format yang dapat dengan mudah disimpan atau dikirim disebut serialisasi. Proses yang terbalik – membuat objek kembali dari data yang diserialisasi – disebut deserialisasi.
Mengapa Kita Butuh Serialisasi?
Serialisasi sangat berguna di Java untuk beberapa alasan:
- Menyimpan status objek: Anda dapat menyimpan status objek dan membuatnya kembali nanti.
- Komunikasi jaringan: Anda dapat mengirim objek melalui jaringan.
- Caching: Objek yang diserialisasi dapat disimpan di cache untuk akses cepat.
- Penyalinan mendalam: Ini menyediakan cara mudah untuk membuat salinan mendalam objek.
Sekarang, mari kita melepas lengan dan masuk ke beberapa kode!
Bagaimana Cara Kerja Serialisasi di Java
Di Java, serialisasi sudah terbina dalam bahasa, yang membuat hidup kita menjadi lebih mudah. Untuk membuat objek dapat diserialisasi, kita perlu melakukan dua hal:
- Mengimplementasikan interface
Serializable
- Memastikan semua bidang objek juga dapat diserialisasi
Mari kita buat kelas Person
sederhana untuk mendemonstrasikan:
import java.io.Serializable;
public class Person implements Serializable {
private String nama;
private int umur;
public Person(String nama, int umur) {
this.nama = nama;
this.umur = umur;
}
@Override
public String toString() {
return "Person{nama='" + nama + "', umur=" + umur + "}";
}
}
Dalam contoh ini, Person
mengimplementasikan Serializable
. Interface Serializable
tidak memiliki method apapun – itu hanya interface penanda yang memberitahu Java bahwa kelas ini dapat diserialisasi.
Menserialisasi Objek
Sekarang bahwa kita memiliki kelas Person
, mari kita serialisasi objek:
import java.io.*;
public class SerializationDemo {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
try (FileOutputStream fileOut = new FileOutputStream("person.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
out.writeObject(person);
System.out.println("Objek Person diserialisasi dan disimpan ke person.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Mari kita bagi ini:
- Kita membuat objek
Person
. - Kita menggunakan
FileOutputStream
untuk menulis ke file bernama "person.ser". - Kita membungkus
FileOutputStream
dalamObjectOutputStream
, yang melakukan serialisasi sebenarnya. - Kita memanggil
writeObject()
untuk serialisasi objekPerson
kita. - Kita menggunakan blok try-with-resources untuk memastikan bahwa stream kita ditutup dengan benar.
Ketika Anda menjalankan ini, itu akan membuat file bernama "person.ser" yang berisi objek Person
yang diserialisasi.
Deserialisasi Objek
Sekarang, mari kita deserialisasi objek kita:
import java.io.*;
public class DeserializationDemo {
public static void main(String[] args) {
try (FileInputStream fileIn = new FileInputStream("person.ser");
ObjectInputStream in = new ObjectInputStream(fileIn)) {
Person person = (Person) in.readObject();
System.out.println("Objek Person yang dideserialisasi:");
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Ini adalah apa yang terjadi:
- Kita menggunakan
FileInputStream
untuk membaca dari "person.ser". - Kita membungkusnya dalam
ObjectInputStream
untuk deserialisasi. - Kita memanggil
readObject()
untuk deserialisasi objek dan menaruhkannya kePerson
. - Kita mencetak objek yang dideserialisasi.
Ketika Anda menjalankan ini, Anda harus melihat objek Person
asli tercetak!
Titik-Titik Penting Tentang Serialisasi di Java
-
SerialVersionUID: Untuk pengontrol versi serialisasi, Anda dapat menentukan
serialVersionUID
di kelas Anda:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
// ... sisa kelas
}
-
Bidang transient: Jika Anda memiliki bidang yang Anda tidak ingin diserialisasi (seperti data sensitif), tandai mereka sebagai
transient
:
public class Person implements Serializable {
private String nama;
private int umur;
private transient String kataSandi; // Ini tidak akan diserialisasi
// ... sisa kelas
}
-
Penyesuaian serialisasi: Anda dapat menyesuaikan proses serialisasi dengan mengimplementasikan method
writeObject()
danreadObject()
di kelas Anda.
Method untuk Menserialisasi dan Deserialisasi Objek
Berikut adalah tabel dari method utama yang digunakan untuk serialisasi dan deserialisasi:
Method | Deskripsi |
---|---|
ObjectOutputStream.writeObject(Object obj) |
Menserialisasi objek |
ObjectInputStream.readObject() |
Mendeserialisasi objek |
Externalizable.writeExternal(ObjectOutput out) |
Method serialisasi khusus |
Externalizable.readExternal(ObjectInput in) |
Method deserialisasi khusus |
Kesimpulan
Selamat! Anda baru saja mengambil langkah pertama Anda ke dunia Java Serialisasi. Kita telah membahas apa itu serialisasi, mengapa itu berguna, dan bagaimana mengimplementasikannya di Java. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan objek dan skenario yang berbeda.
Sebagai Anda melanjutkan perjalanan Java Anda, Anda akan menemukan serialisasi muncul dalam berbagai konteks – dari menyimpan status permainan ke mengirim data melalui jaringan. Ini adalah alat yang kuat di rak peralatan pemrograman Anda.
Terus kode, terus belajar, dan yang paling penting, teruslah untuk bersenang-senang! Siapa tahu, mungkin suatu hari Anda akan menserialisasi seluruh dunia virtual. Sampai saat itu, happy coding!
Credits: Image by storyset