Estou fazendo uns testes com relação a serialização com posterior compressão dos dados.
package teste;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**
*
* @author Magno
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
A a = new A();
a.x = 10;
a.b = new B();
a.b.a = a;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
zos.putNextEntry(new ZipEntry("teste"));
ObjectOutputStream oos = new ObjectOutputStream(zos);
oos.writeObject(a);
byte[] buf = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
ZipInputStream zis = new ZipInputStream(bais);
zis.getNextEntry();
ObjectInputStream ois = new ObjectInputStream(zis);
A a2 = (A)ois.readObject();
System.out.println(a2.x);
System.out.println(a2 == a2.b.a);
}
}
class A implements Serializable {
int x;
B b;
}
class B implements Serializable {
A a;
}
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:223)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:146)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at teste.Main.main(Main.java:37)
Alguem aqui sabe o que fiz de errado?