现在,我使用的是纯的ObjectOutputStream在一个套接字传递对象。 有时候,这些对象可能会变得非常大,导致内存不足的问题。 我相信,对象可以得到压缩,虽然,因为有很多重复他们的内部数据,一般。 因此,我试图总结我的插座有:
static class CompressedSocket extends Socket {
private ZipInputStream zis;
private ZipOutputStream zos;
CompressedSocket(InetAddress inetAddress, int port) throws IOException {
super(inetAddress, port);
zis = new ZipInputStream(super.getInputStream());
zos = new ZipOutputStream(super.getOutputStream());
}
@Override
public ZipInputStream getInputStream() throws IOException {
return zis;
}
@Override
public ZipOutputStream getOutputStream() throws IOException {
return zos;
}
}
然而,在我的课的一部分,我在的ObjectInput / OutputStreams包住插座,我得到以下错误。 以下是相关线路:
ObjectInputStream in = null;
ObjectOutputStream out = null;
Object serverResponse = null;
CompressedSocket socket = null;
try {
socket = new CompressedSocket(InetAddress.getByName(ipAddress), SixDofServer.PORT);
} catch ( ... ) { ... }
try {
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
} catch ( ... ) { ... }
中散发出来的错误是:
java.util.zip.ZipException: no current ZIP entry
at java.util.zip.ZipOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
at java.io.ObjectOutputStream.<init>(Unknown Source)
因此,很明显我没有做正确的事情。 但我发现谷歌和其他导游帮不上什么忙。
现在,如果事实证明,包装一个套接字流仅仅是不是一种选择,无论出于何种原因,我还是想为压缩对象我指的是在开始。 关于如何在本地压缩该对象的任何建议,然后把它在常规的ObjectOutputStream?