Olá pessoal,
Lendo o Livro da K.Sierra entendi que para que a serialização funcione corretamente para objetos de classes que não implementam serializable é necessário criar dois métodos com exatamente esta assinatura:
para escrita:
private void writeObject(ObjectOutputStream out) {//codigo...}
para leitura:
private void readObject(ObjectInputStream in) {//codigo...}
Até aí tudo bem. Mas eu lí também que para que os dois funcionem em sincronia seria necessário chamar respectivamente os dois métodos: out.defaultWriteObject(); e
in.defaultReadObject();
private void writeObject(ObjectOutputStream out) {out.defaultWriteObject(); //codigo...}
private void readObject(ObjectInputStream in) {in.defaultReadObject();//codigo...}
Sendo que resolvendo uma questão do testKiller me deparei com um código que não chamava nem um dos dois métodos dentro dos métodos writeObject e readObject. Daí achei estranho e fui testar. Verifiquei que de fato a serialização funciona normal caso as duas chamadas sejam omitidas dos dois métodos, mas se um dos métodos fizer a chamada o outro terá que fazer também, caso contrário é lançada a exceção:
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.readFully(Unknown Source)
Ou seja se não chamar o defaultXXXObject em nenhum dos dois métodos tudo funciona normal, Se chamar nos dois tudo funciona normal também mas se um fizer a chamada e outro não gera essa exceção. E essa história toda me deixou cheio de duvidas com relação a esses métodos. Alguém saberia me dizer para que de fato eles servem e o porque desse comportamento?
Mas alguem saberia me dizer o por que esses dois métodos readObjetc e writeObject funcionam normalmente mesmo sem a chamada dos defaultxxxObject ?