我想在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