在Android中使用二进制文件中数据的最快方法是什么?

时间:2011-10-17 20:12:26

标签: android image-processing binaryfiles

我有几个二进制文件用于图像处理,其中数据是浮点形式并经常使用。计算包括从相机拍摄的图像中增加和添加像素。

目前,文件作为资源存储在/ res文件夹中,每次使用文件时我都使用DataInputStream,其中数据在单个函数中读取和计算。

我在应用程序中使用文件相对较新,特别是在Android上,所以我想知道是否有更好的做法从文件中获取数据,例如我一遍又一遍地使用相同的数据最好是读取数据并将其存储在数组中,甚至存储在SQLite数据库中。这是一个增强现实应用程序,因此处理后的图像需要近乎实时显示。

非常感谢提前。

编辑:感谢Patthoyts的答案,但是在另一个问题Why people say mmap by MappedByteBuffer is faster?,我已经读过,因为我每次都按顺序读取数据,所以不需要使用MappedByteBuffer。具有Android经验的人可以告诉我,无论何时最好在开始时读取数据并将其存储在大型数组或缓冲区中,或者在每次需要时继续从流中读取数据。总的来说,我有大约50,000个浮点值。

1 个答案:

答案 0 :(得分:1)

您可以在Android上使用内存映射文件,这意味着操作系统可以将数据分页到内存中,以便快速访问,直到其他需要内存为止。您需要将数据文件从res / raw或assets部分复制到数据文件系统,但之后您可以使用MappedByteBuffer来提供访问权限。例如:

FileInputStream inputstream = context.openFileInput(DATA_FILE_PATH);
FileChannel channel = inputstream.getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
buffer.order(ByteOrder.LITTLE_ENDIAN);
IntBuffer intbuffer = buffer.asIntBuffer();

现在使用intbuffer.get(index)依次访问整数序列。