2012-07-25 68 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