0

グリッド設定で多数の画像を潜在的に持つカーソル アダプターがあります。

メソッドが実行されると、bindView非常に迅速に完了する必要があるため、パフォーマンス/効率の向上の一環として、変更を加える前に画像を比較したいと思います(非同期タスクなどの実行を複数回開始しません)。ただし、byte[]これは明らかにメモリを消費するため、全体を (ViewHolder などに) 保存することはできません。

ただし、画像バイト配列の一部 (20 文字程度) を取得して、現在 ViewHolder にあるものと比較し、異なる場合はこれを確認できると考えていました。

これは実行可能なオプションですか、それともこれを行うためのより良い方法はありますか? 2 番目にbyte[]、最もユニークな文字セットを生成するのは のどの部分ですか?

4

1 に答える 1

1

1- MD5 チェックサムを取得します ( Java でファイルの MD5 チェックサムjava.security.DigestInputStreamを取得するを参照)

MessageDigest md = MessageDigest.getInstance("MD5");
InputStream is = new FileInputStream("file.txt");
try {
    is = new DigestInputStream(is, md);
    // read stream to EOF as normal...
}
finally {
  is.close();
}
byte[] digest = md.digest();

2- 2 つの byte[] を比較する小さな方法

boolean safeArrayEquals(byte[] a1, byte[] a2) {
    if (a1 == null || a2 == null) {
        return (a1 == a2);
    }

    if (a1.length != a2.length) {
        return false;
    }

    byte result = 0;
    for (int i = 0; i < a1.length; i++) {
        result |= a1[i] ^ a2[i];
    }

    return (result == 0);
}
于 2013-04-24T11:47:41.973 に答える