1

将文件作为字节数组读取的最快方法是什么(在 Android 上)?该文件大约为 4 MB。它位于资产目录中,这意味着它可能已被压缩。

目前,我正在做这样的事情:

byte[] buffer = new byte[4 * 1024 * 1024];
context.getAssets().open(FILE_NAME).read(buffer);

在 Android 上,创建数组大约需要 40 毫秒,读取文件大约需要 120 毫秒。我怀疑 40 ms 主要是用零填充数组。我可以避免这种情况吗?

该文件基本上是一个需要快速搜索的大约 100,000 个项目的列表。

4

1 回答 1

0

您可以通过使用RandomAccessFile类及其read方法来避免创建字节数组。android页面并没有太大的不同,但也可能很有用。我将 RAF 用于一个项目,以便在需要时从特定文件中存储和检索数据。RAF 对于这些任务非常有用。然而,你读和写的越多,当然会大大增加运行时间。以下是它的用法示例:

import java.io.RandomAccessFile;
import java.io.FileNotFoundException;

public class RAFTest {

    public static void main(String[] args) {
        RandomAccessFile raf;
        String metadata = "This is a test file.";

        try {

            raf = new RandomAccessFile(args[0], "rw");
            raf.writeUTF(metadata);
            int[] nums = new int[10];
            for(int i = 0; i < b.length; i++) {
                nums[i] = i;
                raf.writeInt(nums[i].getValue());
            }

            raf.seek(0); // force pointer to beginning

            System.out.println(raf.readUTF());
            int[] c = new int[5];
            int byteJump = 4;
            for(int i = 0; i < c.length; i++) {
                raf.seek(raf.getFilePointer() + byteJump);
                c[i] = raf.readInt();
                System.out.println(c[i]);
            }

        } catch(Exception ex) { }
    }
}
于 2012-12-29T19:03:40.360 回答