Java.IO.NotSerializableException in Java behoben
-
Reproduzieren Sie die
java.io.NotSerializableException
in Java -
Ursachen der
java.io.NotSerializableException
in Java -
Beheben Sie die
java.io.NotSerializableException
in Java
Heute werden wir die java.io.NotSerializableException
reproduzieren, während wir ein Programm in Java schreiben. Wir werden auch verstehen, was dieser Fehler bedeutet, was zu seinen Ursachen und Lösungen führt.
Reproduzieren Sie die java.io.NotSerializableException
in Java
Beispielcode (Student.java
-Datei):
package com.serializertest;
class Student {
private String studentId;
public String getId() {
return studentId;
}
public void setId(String id) {
this.studentId = id;
}
}
Die Klasse Student
ist eine Hilfsklasse mit einer Mitgliedsvariablen namens studentId
. Es hat auch Mitgliedsmethoden namens getId()
und setId()
, um die id
eines Schülers zu erhalten und festzulegen.
Beispielcode (Datei SerializerTest.java
):
package com.serializertest;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializerTest {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("students.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
Student student = new Student();
student.setId("0001");
objectOutputStream.writeObject(student);
objectOutputStream.close();
}
}
Der SerializerTest
ist unsere Hauptklasse, in der wir die Treibermethode main()
haben. Innerhalb von main()
erstellen wir eine Instanz der Klasse FileOutputStream
, um eine Datei zu erstellen.
Auf ähnliche Weise erstellen wir eine weitere Instanz der Klasse ObjectOutputStream
.
Dann erstellen wir ein Objekt der Klasse Student
und rufen seine Methode setId()
auf, indem wir ein String-Argument übergeben. Als nächstes verwenden wir das Objekt der Klasse ObjectOutputStream
, um ein Objekt in den Stream zu schreiben.
Dafür verwenden wir die Methode writeObject()
.
Danach schließen wir den Stream mit der Methode close()
und führen das Programm aus, aber es gibt uns die folgende Ausnahme
in der Ausgabekonsole des Programms.
Exception in thread "main" java.io.NotSerializableException: com.serializertest.Student
Warum sind wir damit konfrontiert? Lassen Sie uns den Fehler verstehen, um seine Ursachen unten herauszufinden.
Ursachen der java.io.NotSerializableException
in Java
Es ist wichtig, NotSerializableException
und Serialization
zu verstehen, um die Ursachen zu finden.
Serialisierung
ist ein Mechanismus in der Java-Programmierung, den wir verwenden, um den Zustand eines Objekts in den Bytestrom zu schreiben. Im Gegensatz dazu wird die umgekehrte Operation davon “Deserialisierung” genannt.
Die Serialisierung
und Deserialisierung
sind plattformunabhängig. Das bedeutet, dass beide Prozesse auf unterschiedlichen Plattformen ausgeführt werden können.
Wir verwenden Serialisierung
in Remote Method Invocation (RMI
) und Enterprise Java Beans (EJB
). Es wird auch in Java Persistence API (JPA
), Hibernate usw. verwendet.
Die NotSerializableException
ist eine Ausnahme, die die Klasse ObjectStreamException
erweitert, die als Oberklasse aller anderen Ausnahmen definiert ist, die für die Object Stream-Klassen spezifisch sind.
Zusätzlich erweitert die ObjectStreamException
die IOException
, die weiter signalisiert, dass eine I/O-Exception generiert wurde.
Nun kennen wir die Serialization
und NotSerializableException
in Java. Diese Diskussion führt uns dazu, die Gründe für NotSerializableException
in Java zu entdecken.
- Die
NotSerializableException
tritt auf, wenn eine Instanz einer Klasse eineSerializable
-Schnittstelle implementieren muss. - Wir erhalten diese Ausnahme auch entweder von einer Instanz einer Klasse oder der Serialisierungslaufzeit. Denken Sie daran, dass das Argument von
NotSerializableException
ein Name einer Klasse ist. - Gemäß der Dokumentation muss der vollständige Objektgraph serialisierbar sein. Die
NotSerializableException
tritt auch auf, wenn beim Versuch, eine Instanz einer Klasse zu serialisieren, mindestens eines der Felder die SchnittstelleSerializable
nicht implementiert.
Beheben Sie die java.io.NotSerializableException
in Java
Wir können die java.io.NotSerializableException
in Java mit den folgenden Lösungen beheben.
-
Suchen Sie die Klasse, die diese Ausnahme
auslöst
, und machen Sie sieSerialisierbar
, indem Sie dieSerializable
-Schnittstelle implementieren. Denken Sie daran, dass diese Lösung möglicherweise keine gute Wahl ist, wenn eine Klasse, die dieNotSerializableException
auslöst, zur Bibliothek eines Drittanbieters gehört. -
Wir können die Objekte als
transient
deklarieren, wenn sich die Klasse auf die nicht serialisierbaren Objekte bezieht, wobei diese Objekte nicht serialisierbar sein dürfen. Die Frage ist, warum es alsvorübergehend
deklarieren?Dies liegt daran, dass die als
transient
deklarierten Felder der Klasse von der serialisierbaren Laufzeit ignoriert würden und wir keine Ausnahmen erhalten würden. -
Wenn wir seine Daten und deren Dritte benötigen, können wir andere Möglichkeiten der Serialisierung in Betracht ziehen. Zum Beispiel XML, JSON usw., wo wir die Objekte von Drittanbietern serialisieren können, ohne ihre Definitionen zu ändern.
In unserem Fall hat die Implementierung von Serializable
die java.io.NotSerializableException
behoben. Siehe den folgenden Beispielcode.
Beispielcode (Datei Students.java
):
package com.serializertest;
import java.io.Serializable;
class Student implements Serializable {
private String studentId;
public String getId() {
return studentId;
}
public void setId(String id) {
this.studentId = id;
}
}
Beispielcode (Datei SerializerTest.java
):
package com.serializertest;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializerTest {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("students.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
Student student = new Student();
student.setId("0001");
objectOutputStream.writeObject(student);
objectOutputStream.close();
}
}
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse