0

Android の SD カードに保存されている大きなファイル (50MB から 100MB) を読み取るのにかかる時間 (概算) を知りたいです。Google Nexus One の Android 2.3.3 で次のコードを使用しています。これで妥当な見積もりが得られますか? 使用すべき標準的な方法はありますか? また、ネイティブ コードを使用するとファイル I/O パフォーマンスが向上しますか?

ありがとう。

public void readFileFromSDCard() throws IOException
{
    long start = System.currentTimeMillis();
    long size = 0;
    File file = new File(OVERLAY_PATH_BASE + "base-ubuntu.vdi");
    try {

        InputStream in = new FileInputStream(file);
        try {
            byte[] tmp = new byte[4096];
            int l;
            while ((l = in.read(tmp)) != -1) {
                size = size + 4096;
            }
        } finally {
            in.close();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } 
    long end = System.currentTimeMillis();
    Log.e(LOG_TAG,
            "Reading file " + file.getAbsolutePath() + " with " + size  + "bytes took " + (end-start) + " ms.");

}
4

1 に答える 1

1

このコードに対して行う最も簡単な方法は、各 while ループの反復にかかる時間を計測し、それを使用して残り時間を推定することです。たとえば、1 秒間に 1 回の繰り返しで 0.1Mb を処理し、合計で 1Mb を処理する必要がある場合、約 9 秒かかると推測できます。

SD カードのパフォーマンスは携帯電話によって大きく異なり、速度は同じ携帯電話でも予測できない場合があります (たとえば、携帯電話で小さなファイルの場合、大きなランダムな遅延が発生します)。ファイルを処理する前に電話をベンチマークするなど、上記よりも高度なことを自分で行う価値はないと思います。ほとんどの場合、パーセント バーで十分です。

于 2011-04-06T11:29:04.863 に答える