我想在Android應用程序中寫入磁盤,我在一個int [](或者一個字節[]如果你喜歡的)中有一些二進制數據(像素值)。我只想使用少量的處理時間,但希望儘可能多地進行壓縮。我有什麼選擇?快速的方法來壓縮二進制數據?
在許多情況下,數組將包含很多連續的零,所以像RLE壓縮這樣簡單快速的東西可能會工作得很好。雖然我看不到任何Android API函數。如果我必須在Java中循環訪問數組,這將會非常緩慢,因爲大多數Android設備上都沒有JIT。我可以使用NDK,但如果可以的話,我寧願避免這種情況。
真正的問題是什麼是折衷。一般來說,我認爲編寫原始字節會更快,因爲其他任何方法都會使用處理器時間,例如DeflaterOutputStream或GZipOutputStream,特別是對於大量數據可能需要很長時間。 – Nicholas 2010-11-02 03:28:01
我想RLE的開銷會很低,但是我找不到一個API函數來爲我做RLE。在非JIT Android手機上使用Java代碼執行此操作將非常緩慢。 Deflater和GZip似乎使用更復雜的壓縮(即霍夫曼),而且處理起來會慢得多。 – RichardNewton 2010-11-02 04:02:32
對於存在大量相似連續顏色(這似乎是您的情況)的每個像素,可以使用無損PNG格式非常高效地編碼像素值(如在「32位ARGB」中的int []中)接受你想要的無損)。用於無損壓縮的算法behing PNG稱爲DEFLATE(根據wiki,基本上是Huffman + LZ77)。不知道如何強大的Android設備,但編碼一個微小的(PNG屏幕尺寸真的很小,相比我的1920x1200桌面)使用PNG圖片真的不接近數字處理... – SyntaxT3rr0r 2010-11-02 19:07:07