Não estou conseguindo carregar um objeto transient usando o método readObject para serializar na unha objetos. Segue meu código:
package scjpserializarobjeto;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Pessoa implements Serializable {
String nome;
int idade;
double peso;
transient Relogio relogio;
Pessoa(String nome, int idade, double peso, Relogio rel){
this.nome = nome;
this.idade = idade;
this.peso = peso;
this.relogio = rel;
}
private void writeObject(ObjectOutputStream os){
try {
os.defaultWriteObject();
os.writeChars(relogio.marca);
os.writeInt(relogio.tamanho);
} catch (Exception e) {
e.printStackTrace();
}
}
private void readObject(ObjectInputStream is){
try {
is.defaultReadObject();
relogio = new Relogio(is.readLine(), is.readInt());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Quando executo este código, ocorre este erro:
run:
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
jose
at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2775)
at java.io.ObjectInputStream.readInt(ObjectInputStream.java:949)
at scjpserializarobjeto.Pessoa.readObject(Pessoa.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at scjpserializarobjeto.Main.main(Main.java:29)
Exception in thread "main" java.lang.NullPointerException
at scjpserializarobjeto.Main.main(Main.java:33)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
Embaixo de “jose”, deveria printar um atributo da classe relogio chamado marca e outro chamado tamanho.
