Java - Pengekodan (Serialization)
Hai di sana, para penyihir Java masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke atas dunia Pengekodan Java. Jangan khawatir jika kamu baru untuk pemrograman – saya akan menjadi pemandu kamu yang bersahabat, dan kita akan melakukannya langkah demi langkah. Pada akhir tutorial ini, kamu akan dapat untuk mengekod objek seperti profesional!
Apakah itu Pengekodan?
Sebelum kita melompat ke atas kod, mari kita fahami apa itu pengekodan. Bayangkan kamu memiliki roti sandwich yang sedap (objek dalam terminologi Java) yang kamu ingin kirim ke atas rakan kamu melalui surat. Kamu tidak boleh untuk stuff sandwich keseluruhan ke atas wadah, kan? Sebaliknya, kamu perlu untuk memecahkan ia ke atas bahan-bahannya, menulis mereka di atas atas kertas, dan mengirim itu. Apabila rakan kamu menerima ia, mereka boleh untuk membuat kembali sandwich menggunakan arahan. Proses ini untuk memecahkan objek ke atas format yang boleh untuk disimpan atau dihantar adalah dipanggil pengekodan. Proses yang songsang – membuat kembali objek dari data yang dienkod – adalah dipanggil deserialization.
Mengapa Kita Perlu Pengekodan?
Pengekodan adalah sangat berguna di atas Java untuk beberapa alasan:
- Menyimpan status objek: Kamu boleh untuk menyimpan status objek dan membuat kembali ia kemudian.
- Komunikasi jaringan: Kamu boleh untuk mengirim objek melalui jaringan.
- Penyimpanan cache: Objek yang dienkod boleh untuk disimpan di atas cache untuk akses cepat.
- Penyalinan mendalam: Ia menyediakan cara mudah untuk membuat penyalinan mendalam objek.
Sekarang, mari kita melepaskan lengan kita dan masuk ke atas beberapa kod!
Bagaimana Pengekodan Berfungsi di atas Java
Di atas Java, pengekodan adalah terbina ke atas bahasa, yang membuat hidup kita lebih mudah. Untuk membuat objek yang boleh dienkod, kita perlu untuk melakukan dua hal:
- Mengimplementasikan antara muka
Serializable
- Memastikan semua medan objek juga boleh dienkod
Mari kita membuat kelas Person
yang simple untuk mempersembahkan:
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
. Antara muka Serializable
tidak memiliki sebarang kaedah – ia hanya wajah penanda yang memberitahu Java kelas ini boleh dienkod.
Mengenkod Objek
Sekarang kita memiliki kelas Person
kita, mari kita enkod 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 dienkod dan disimpan ke atas person.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Mari kita pecahkan ini:
- Kita membuat objek
Person
. - Kita menggunakan
FileOutputStream
untuk menulis ke atas fail bernama "person.ser". - Kita membungkus
FileOutputStream
di atasObjectOutputStream
, yang melakukan pengekodan sebenar. - Kita memanggil
writeObject()
untuk mengenkod objekPerson
kita. - Kita menggunakan blok try-with-resources untuk memastikan rakitan kita ditutup dengan baik.
Apabila kamu menjalankan ini, ia akan membuat fail yang dipanggil "person.ser" yang mengandungi objek Person
yang dienkod.
Mendekod Objek
Sekarang, mari kita dekod 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 dideskod:");
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Berikut adalah apa yang berlaku:
- Kita menggunakan
FileInputStream
untuk membaca dari "person.ser". - Kita membungkus ia di atas
ObjectInputStream
untuk deskodifikasi. - Kita memanggil
readObject()
untuk mendekod objek dan mengcasting ia ke atasPerson
. - Kita mencetak keluar objek yang dideskod.
Apabila kamu menjalankan ini, kamu sepatutnya untuk melihat objek Person
asal yang dicetak keluar!
Titik penting Mengenai Pengekodan di atas Java
-
SerialVersionUID: Untuk pengawalan versi pengekodan, kamu boleh untuk menentukan
serialVersionUID
di atas kelas kamu:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
// ... sisanya kelas
}
-
Medan sementara: Jika kamu memiliki medan yang kamu tidak ingin untuk dienkod (seperti data sensitif), tandakan mereka sebagai
transient
:
public class Person implements Serializable {
private String nama;
private int umur;
private transient String kataLaluan; // Ini tidak akan dienkod
// ... sisanya kelas
}
-
Penyesuaian pengekodan: Kamu boleh untuk menyesuaikan proses pengekodan dengan mengimplementasikan kaedah
writeObject()
danreadObject()
di atas kelas kamu.
Kaedah untuk Mengenkod dan Mendekod Objek
Berikut adalah rakaman kaedah utama yang digunakan untuk pengekodan dan deskodifikasi:
Kaedah | Keterangan |
---|---|
ObjectOutputStream.writeObject(Object obj) |
Mengenkod objek |
ObjectInputStream.readObject() |
Mendekod objek |
Externalizable.writeExternal(ObjectOutput out) |
Kaedah pengekodan penyuaian |
Externalizable.readExternal(ObjectInput in) |
Kaedah deskodifikasi penyuaian |
Penutup
Tahniah! Kamu baru untuk membuat langkah pertama kamu ke atas dunia Pengekodan Java. Kita telah menutupi apa itu pengekodan, mengapa ia berguna, dan bagaimana untuk melaksanakannya di atas Java. Ingat, latihan membuat perfection, jadi jangan takut untuk untuk bereksperimen dengan objek dan senario yang berbeza.
Apabila kamu teruskan perjalanan kamu di atas Java, kamu akan menemukan pengekodan muncul di atas konteks yang berbeza – dari menyimpan status permainan ke penghantaran data melalui jaringan. Ia adalah alat yang berkuasa di atas rakaman pemrograman kamu.
Teruskan untuk pemrograman, teruskan untuk belajar, dan yang paling penting, teruskan untuk untuk mempunyai kesenangan! Siapa tahu, mungkin satu hari kamu akan untuk mengekod dunia maya keseluruhan. Hingga itu, happy coding!
Credits: Image by storyset