在Java中为对象实现内存中压缩


问题内容

我们有一个用例,我们想压缩和存储对象(内存中),并在需要时解压缩它们。

我们想要压缩的数据变化很大,从浮点向量到字符串再到日期。

有人可以建议使用任何好的压缩技术吗?

我们将压缩的难易程度和减压速度视为最重要的因素。

谢谢。


问题答案:

如果要压缩实例,MyObject可以实现它Serializable,然后将对象流式传输到压缩的字节数组中,如下所示:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzipOut = new GZIPOutputStream(baos);
ObjectOutputStream objectOut = new ObjectOutputStream(gzipOut);
objectOut.writeObject(myObj1);
objectOut.writeObject(myObj2);
objectOut.close();
byte[] bytes = baos.toByteArray();

然后解压缩byte[]到对象中:

ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
GZIPInputStream gzipIn = new GZIPInputStream(bais);
ObjectInputStream objectIn = new ObjectInputStream(gzipIn);
MyObject myObj1 = (MyObject) objectIn.readObject();
MyObject myObj2 = (MyObject) objectIn.readObject();
objectIn.close();