1

(Androidで)ファイルをバイト配列として読み取る最速の方法は何ですか? ファイルは約4MBです。assets ディレクトリ内にあるため、圧縮されている可能性があります。

現在、私は次のようなことをしています:

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

Android では、配列の作成に約 40 ミリ秒、ファイルの読み取りに約 120 ミリ秒かかります。40 ミリ秒は、ほとんどが配列をゼロで埋めることで構成されていると思われます。これを避けることはできますか?

このファイルは基本的に、すばやく検索する必要がある約 100,000 項目のリストです。

4

1 に答える 1

0

readメソッドでRandomAccessFileクラスを使用することにより、バイト配列の作成を回避できます。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 に答える