java - 比较 byte[] 的各个部分以确定两个 byte[] 是否相同

标签 java android

我有一个光标适配器,其中网格设置中可能有许多图像。

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/

相关文章:

android - Parse 和 Xmpp 同时登录与 facebook 集成

java - 嵌套 For 循环 - 将字符串元素与数组对象分隔开

java - 获取格式为 "\\"的 Java 文件路径

通过通用父类访问的子类中的 Java 静态成员

java - Jetty - JAAS 和 Active Directory - 仅身份验证?

java - glReadPixel 返回零和错误 1282 (Android)

java - 如何确定屏幕保护程序是否在 Java 中运行?

android - 如何构建 Firebase 中自动完成搜索的数据

android - 修复 Android 中的 Zip 路径遍历漏洞

android - ConstraintLayout 的问题 - 垂直边距不起作用