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!

Java - Serialization

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:

  1. Menyimpan status objek: Kamu boleh untuk menyimpan status objek dan membuat kembali ia kemudian.
  2. Komunikasi jaringan: Kamu boleh untuk mengirim objek melalui jaringan.
  3. Penyimpanan cache: Objek yang dienkod boleh untuk disimpan di atas cache untuk akses cepat.
  4. 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:

  1. Mengimplementasikan antara muka Serializable
  2. 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:

  1. Kita membuat objek Person.
  2. Kita menggunakan FileOutputStream untuk menulis ke atas fail bernama "person.ser".
  3. Kita membungkus FileOutputStream di atas ObjectOutputStream, yang melakukan pengekodan sebenar.
  4. Kita memanggil writeObject() untuk mengenkod objek Person kita.
  5. 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:

  1. Kita menggunakan FileInputStream untuk membaca dari "person.ser".
  2. Kita membungkus ia di atas ObjectInputStream untuk deskodifikasi.
  3. Kita memanggil readObject() untuk mendekod objek dan mengcasting ia ke atas Person.
  4. 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

  1. 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
}
  1. 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
}
  1. Penyesuaian pengekodan: Kamu boleh untuk menyesuaikan proses pengekodan dengan mengimplementasikan kaedah writeObject() dan readObject() 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