Rumah > Java > javaTutorial > Mengapa Adakah `readObject()` Membuang `java.io.NotSerializableException` dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Adakah `readObject()` Membuang `java.io.NotSerializableException` dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Lepaskan: 2024-12-06 21:49:17
asal
920 orang telah melayarinya

Why Does `readObject()` Throw `java.io.NotSerializableException` and How Can I Fix It?

readObject() Melemparkan java.io.NotSerializableException: Mengapa dan Bagaimana untuk Membetulkan

Apabila cuba menyiri objek yang mengandungi tidak boleh bersiri medan, kaedah writeObject() boleh menaikkan java.io.NotSerializableException. Ini berlaku kerana proses bersiri memerlukan semua medan objek dan objek bersarangnya boleh bersiri.

Contoh:

Pertimbangkan pengecualian berikut:

java.io.NotSerializableException: javax.media.j3d.TransformGroup
Salin selepas log masuk

Ini menunjukkan bahawa contoh javax.media.j3d.TransformGroup sedang diserikan, tetapi ia berlaku tidak melaksanakan antara muka Serializable.

Cara Membetulkan:

Terdapat beberapa cara untuk menyelesaikan isu ini:

1. Jadikan kelas yang menyinggung Boleh Bersiri:

Jika anda mempunyai kawalan ke atas kelas tidak boleh bersiri, ubah suainya untuk melaksanakan antara muka Boleh Bersiri. Ini akan membolehkan proses bersiri mengakses dan menulis medannya.

2. Tandakan medan sebagai sementara:

Jika anda tidak perlu mensirikan objek tidak boleh disiri, isytiharkan medannya sebagai sementara. Ini akan mengecualikannya daripada proses bersiri, membenarkan objek disiri tanpa pengecualian.

3. Gunakan kaedah bersiri alternatif:

Jika kelas tidak boleh bersiri adalah milik pihak ketiga dan anda tidak boleh mengubah suainya, pertimbangkan untuk menggunakan kaedah bersiri lain yang menyokong objek pihak ketiga, seperti JSON, XML, BSON , atau MessagePack. Kaedah ini boleh mensiri data tanpa memerlukan objek bersiri untuk melaksanakan Serializable.

Contoh pembetulan untuk kod yang disediakan:

class Atom extends Group implements Serializable {
    // ... Define other fields ...

    @Transient
    private TransformGroup group; // Mark the problematic field as transient
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Adakah `readObject()` Membuang `java.io.NotSerializableException` dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan