我有一个光标适配器,其中网格设置中可能有许多图像。
当 bindView
方法运行时,它需要非常快地完成,因此作为性能/效率提升的一部分,我想在进行任何更改之前比较图像(所以我不开始多次运行我的异步任务等)。但是,我无法存储整个 byte[]
(例如在 ViewHolder 中),因为这显然会占用内存。
但是,我想我可以获取图像字节数组的一部分(20 个字符左右),并将其与 ViewHolder 中当前的内容进行比较,如果不同,则可以验证。
这是一个可行的选择还是有更好的方法?其次,byte[]
的哪一部分将产生最独特的字符集?
最佳答案
1- 使用 java.security.DigestInputStream
获取 MD5 校验和(请参阅 Getting a File's MD5 Checksum in Java )
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-比较两个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);
}
关于java - 比较 byte[] 的各个部分以确定两个 byte[] 是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16190517/