使用ZipOutputStream和ObjectOutputStream的问题(Problems w

2019-10-18 13:37发布

现在,我使用的是纯的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?

文章来源: Problems with using ZipOutputStream and ObjectOutputStream