【发布时间】:2009-07-05 00:40:21
【问题描述】:
我有一些非常大的整数数组要压缩。
然而,在 java 中做到这一点的方法是使用这样的东西 -
int[] myIntArray;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new DeflaterOutputStream(byteArrayOutputStream));
objectOutputStream.writeObject(myIntArray);
注意int数组首先需要通过java转换为字节。 现在我知道这很快,但它仍然需要创建一个全新的字节数组并扫描整个原始 int 数组,将其转换为字节并将值复制到新的字节数组。
有什么方法可以跳过字节转换并立即压缩整数?
【问题讨论】:
-
这没有意义。压缩算法需要字节,而不是整数。
-
您的 int 数组在哪里转换为字节? ObjectOutputStream 获取您的对象并直接对其进行序列化。 DeflaterOutputStream 对序列化的结果进行压缩,然后将压缩后的结果存储在一个 ByteArrayOutputStream 中。我认为这正是你想要发生的事情......
-
在我的情况下,我要压缩的对象是一个 int[] 数组。序列化过程将其转换为字节,这是我要跳过的步骤。
-
为什么?你说你想跳过一个你不需要知道的步骤。每个阶段都有一个数据副本,解压缩时也是如此。如果性能是您的问题,您希望节省多少时间?您是否意识到,即使是少量数据,创建对象的成本也要高得多。
标签: java compression