在我的Android应用中,我有一个Bitmap对象和一个int []。我的应用程序中的一个算法将Bitmap像素值复制到int [],然后修改后者中的值。
我想尽快将原始int []的内容保存到磁盘。什么是快速和内存有效的方法来做到这一点? (即在每个int []项目上调用.writeInt函数在Android中执行此操作的速度非常慢,因为大多数设备上没有JIT)
我发现如果我创建一个与int []大小相同的byte []并将int []复制到byte [],我可以使用许多文件io方法之一来编写byte []一次API调用中的磁盘。但是,这会占用大量额外的内存,因为我现在有两个版本的int []。
如果失败了,也许有一些方法会直接将Bitmap的int值写入文件?如果是这样,我可以将int []复制回Bitmap对象并使用它。
顺便说一句,我不想使用“.png”压缩,只想保存原始值,因为后者更快。
答案 0 :(得分:1)
我认为你必须分配一个缓冲区(byte[]
),其大小可以最大化性能并且仍然只使用合理数量的内存。也许就像8K。
然后在页面中循环遍历数组(缓冲区大小/ 4),填充缓冲区并将其写出。然后,下一页可以重用相同的缓冲区。确保你正确处理最后一页,这可能是半空的(当然有一个位图,它可能与8K缓冲区对齐)。
答案 1 :(得分:1)
我认为您可以使用缓冲流概念,只需将int []的部分转换为byte []并写入,然后执行下一批操作。尝试测试并确定一个缓冲区大小对内存要求不高但足够高效,我认为几KB就足够了。
答案 2 :(得分:0)
最快的方法是创建一个使用C函数写出来的NDK库,然后使用JNI将Int数组传递给C例程。
-niko