快速将int []写入磁盘?

时间:2010-11-02 02:10:58

标签: java android mobile

在我的Android应用中,我有一个Bitmap对象和一个int []。我的应用程序中的一个算法将Bitmap像素值复制到int [],然后修改后者中的值。

我想尽快将原始int []的内容保存到磁盘。什么是快速和内存有效的方法来做到这一点? (即在每个int []项目上调用.writeInt函数在Android中执行此操作的速度非常慢,因为大多数设备上没有JIT)

我发现如果我创建一个与int []大小相同的byte []并将int []复制到byte [],我可以使用许多文件io方法之一来编写byte []一次API调用中的磁盘。但是,这会占用大量额外的内存,因为我现在有两个版本的int []。

如果失败了,也许有一些方法会直接将Bitmap的int值写入文件?如果是这样,我可以将int []复制回Bitmap对象并使用它。

顺便说一句,我不想​​使用“.png”压缩,只想保存原始值,因为后者更快。

3 个答案:

答案 0 :(得分:1)

我认为你必须分配一个缓冲区(byte[]),其大小可以最大化性能并且仍然只使用合理数量的内存。也许就像8K。

然后在页面中循环遍历数组(缓冲区大小/ 4),填充缓冲区并将其写出。然后,下一页可以重用相同的缓冲区。确保你正确处理最后一页,这可能是半空的(当然有一个位图,它可能与8K缓冲区对齐)。

答案 1 :(得分:1)

我认为您可以使用缓冲流概念,只需将int []的部分转换为byte []并写入,然后执行下一批操作。尝试测试并确定一个缓冲区大小对内存要求不高但足够高效,我认为几KB就足够了。

答案 2 :(得分:0)

最快的方法是创建一个使用C函数写出来的NDK库,然后使用JNI将Int数组传递给C例程。

-niko