将文件作为字节数组读取的最快方法

时间:2012-12-29 18:33:16

标签: java android

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用RandomAccessFile类及其read方法来避免创建字节数组。 android page并没有太大的不同,但也可能有用。我使用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) { }
    }
}
相关问题