2012-07-25 33 views
5

我有很多数据(文本格式)要从设备发送。这显然意味着我应该压缩它。但我的问题是,除zip算法之外是否还有其他方法可以做到这一点(like this)。我问这个问题的原因是在here以上 - 对于文本文件,即7-zip比zip更好两倍(!)。这是一个重大的收益。也许还有更好的算法。Android上的数据压缩(除java.util.zip?)

那么是否有任何有效的数据压缩方式(比zip更好)可用于Android?

+1

两次以及...这当然是一个问题。不同的压缩算法比其他压缩算法更好,特别是对于某些类型的数据压缩,但这不是唯一的考虑因素。标准化,专利权保留和速度非常重要。 – 2012-07-25 10:28:13

+0

快速搜索似乎表明您的简单选择是Zip和Gzip。 – 2012-07-25 10:37:53

+0

zip和gzip使用相同的压缩算法,只是不同的标题和预告片比zip。因此,您可以使用gzip格式在标题和结尾处保存几个字节,如果使用zlib格式,则可以再多保存几个字节。但是,如果使用更高级的压缩算法,需要更多的时间和更多的内存,那么没有什么实质性的。 – 2012-07-25 16:16:03

回答

6

因为我怀疑zlib以外的其他压缩算法可用作Android标准库的一部分,所以您需要将另一个库编译到代码中。

你提到的7-zip算法实际上叫做LZMA,你可以在LZMA SDK中以库的形式获得。源代码以Java和C的形式提供。如果您可以将C代码链接到您的应用程序中,那么速度会更快。

由于没有免费的午餐这样的事情,速度很重要。 LZMA将需要更多的内存和更多的执行时间来实现改进的压缩。您应该在数据上试验LZMA和zlib,以查看您希望在执行时间和压缩之间进行权衡的位置,以便选择包并选择包​​内的压缩级别。

如果您发现您希望采用其他方式,以比zlib更低的压缩率和更高的速度,您可以查看lz4

-1

你的问题太笼统了。

只要使用Java或C/C++(通过NDK),您就可以使用任何库。如果你不想使用外部库,你必须坚持SDK中的内容。根据您发送数据的方式,可能有标准的方法来执行此操作。例如,HTTP使用gzip并且已经定义了必要的头文件。

总之,测试不同的东西与您预期的数据格式和大小,找到最好的一个,并将其集成到您的应用程序。

+0

数据通过自定义协议发送,所以我不会使用HTTP。你能给我一个好的java压缩库的提示吗?我从来没有真正使用过任何。 – alex 2012-07-25 09:25:00

+0

我的:)对于我来说,JDK的已经足够了。而不是随便挑选一个,找一些并根据您的数据进行测试。 – 2012-07-25 09:26:23