Java Academy · Pelajaran

Asas Pensirilan Java

Laksanakan Serializable, tulis objek ke strim dengan ObjectOutputStream dan baca semula objek tersebut.

Pelajaran 1 daripada 413 langkah

Asas Pensirilan Java ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah Penyirian Java?

Penyirian menukar keadaan objek kepada aliran bait supaya objek itu boleh disimpan pada cakera, dihantar melalui rangkaian atau disimpan dalam pangkalan data. Penyahsirian membalikkan proses tersebut.

Antara Muka Penanda Serializable

Untuk menyerikan kelas, laksanakan java.io.Serializable. Ia tidak mempunyai kaedah — ia menandakan kepada JVM bahawa tika kelas ini boleh diserikan.

import java.io.Serializable;
public class User implements Serializable {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override public String toString() { return name + " / " + age; }
}

Menulis Objek dengan ObjectOutputStream

Balut FileOutputStream dalam ObjectOutputStream dan panggil writeObject() untuk menyerikan objek.

import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("user.ser"))) {
    oos.writeObject(new User("Alice", 30));
    System.out.println("Serialized successfully");
}

Membaca Objek dengan ObjectInputStream

Balut FileInputStream dalam ObjectInputStream dan panggil readObject() untuk menyahserikan objek. Tukarkan hasil kepada jenis yang dijangkakan.

import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream("user.ser"))) {
    User u = (User) ois.readObject();
    System.out.println("Deserialized: " + u);
}

Menserialkan Graf Objek

Semua objek yang dirujuk oleh objek yang diserialkan juga mesti melaksanakan Serializable, jika tidak NotSerializableException akan dilemparkan semasa masa jalan.

public class Order implements Serializable {
    private User customer;   // User must be Serializable
    private List<String> items;
    public Order(User customer, List<String> items) {
        this.customer = customer;
        this.items = items;
    }
}

NotSerializableException

Jika mana-mana medan dalam graf objek tidak boleh diserialkan dan tidak ditandakan sebagai transient, Java akan melemparkan NotSerializableException semasa penulisan.

// Thread is NOT Serializable
public class Task implements Serializable {
    private Thread worker; // throws NotSerializableException!
    // Fix: mark as transient
    private transient Thread worker2;
}

Graf Objek dan Rujukan Dikongsi

Java menjejaki identiti objek semasa serialisasi. Jika dua medan merujuk kepada objek yang sama, hanya satu salinan ditulis dan kedua-dua medan menunjuk kepada instans yang sama selepas penyahserialan.

Menserialkan Koleksi

Koleksi piawai seperti ArrayList, HashMap dan LinkedList sudah pun melaksanakan Serializable, jadi koleksi tersebut boleh diserialkan selagi elemennya juga boleh diserialkan.

List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("names.ser"))) {
    oos.writeObject(names);
}

Pewarisan dan Serialisasi

Jika kelas induk ialah Serializable, semua subkelas juga boleh diserialkan. Jika kelas induk TIDAK boleh diserialkan, medan kelas induk tidak disimpan; kelas induk mesti mempunyai pembina tanpa argumen untuk penyahserialan.

Mengesahkan Aliran Bait

Aliran bait yang diserialkan bermula dengan bait ajaib 0xACED 0x0005. Anda boleh memeriksanya menggunakan penyunting heksadesimal atau menyahkodnya dengan alat SerialVer untuk memahami format tersebut.

Amaran Keselamatan

Penyahserialan Java ialah vektor serangan yang diketahui. Jangan sekali-kali menyahserialkan data daripada sumber yang tidak dipercayai tanpa pengesahan. Utamakan JSON, Protobuf atau sampul bertandatangan untuk data luaran.

Semakan Pantas

Kaedah apakah yang menserialkan objek ke dalam aliran?

Imbas Kembali

Serialisasi Java menggunakan ObjectOutputStream / ObjectInputStream. Kelas mesti melaksanakan Serializable. Elakkan menserialkan data daripada sumber yang tidak dipercayai — utamakan alternatif moden untuk kod baharu.

Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Asas Pensirilan Java” percuma?

Ya — teks penuh “Asas Pensirilan Java” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Asas Pensirilan Java”?

Laksanakan Serializable, tulis objek ke strim dengan ObjectOutputStream dan baca semula objek tersebut. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Asas Pensirilan Java” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Asas Pensirilan Java
  2. Medan transient dan serialVersionUID
  3. Pensirilan Tersuai: writeObject dan readObject
  4. Alternatif Moden: JSON dan Protocol Buffers
← Kembali ke Java Academy