Je reçois java.io.NotSerializableException: java.io.ObjectOutputStream
C'est le code que j'ai essayé
import java.util.Scanner;
import java.io.*;
abstract class Account implements Serializable {
protected String accountHolderName;
protected long balance;
protected ObjectOutputStream accData;
Scanner input = new Scanner(System.in);
}
class Savings extends Account implements Serializable {
Savings() throws IOException {
System.out.print("enter your name: ");
accountHolderName = input.nextLine();
System.out.print("\n");
System.out.print("enter your balance: ");
balance = input.nextLong();
accData = new ObjectOutputStream(new FileOutputStream(accountHolderName + ".bin"));
accData.writeObject(this);
accData.close();
}
}
class Banking implements Serializable {
public static void main(String args[]) throws IOException {
Scanner input = new Scanner(System.in);
Savings savobj = new Savings();
}
}
et c'est l'exception-je obtenir
Exception in thread "main" java.io.NotSerializableException:
java.io.ObjectOutputStream
à java.io.ObjectOutputStream.writeObject0(Source Inconnue)
à java.io.ObjectOutputStream.defaultWriteFields(Source Inconnue)
à java.io.ObjectOutputStream.writeSerialData(Source Inconnue)
à java.io.ObjectOutputStream.writeOrdinaryObject(Source Inconnue)
à java.io.ObjectOutputStream.writeObject0(Source Inconnue)
à java.io.ObjectOutputStream.writeObject(Source Inconnue)
à l'Épargne.(Bancaire.java:22)
dans la banque.principale(Bancaire.java:30)
J'ai aussi essayé d'utiliser savobj.accData.writeObj(savobj)
de main(
), mais j'obtiens toujours la même exception. Que dois-je faire?
OriginalL'auteur Jeet Parekh | 2015-04-12
Vous devez vous connecter pour publier un commentaire.
Seulement les primitives et les classes qui implémentent
Serializable
interface peut être sérialisé.ObjectOutputStream
ne pas implémenter cette interface.Rapide de la solution: utiliser le
ObjectOutputStream
dans le plus étroit possible, de le déclarer dans la méthode où il est utilisé, non pas comme un champ de la classe. Faire la même avec d'autres classes utilitaires commeScanner
.Une autre solution peut être juste le marquage de ces champs comme
transient
donc ils ne seront pas sérialiser/désérialiser:transient
.a parfaitement fonctionné
OriginalL'auteur Luiggi Mendoza