如何使用 FileInputStream 比较 Java 中的字节与字节

How to compare byte to byte in Java using FileInputStream

任何人都可以编写伪代码来比较 Java 中的字节与字节。我知道我们使用 read() 来逐字节读取。但是我们如何进行比较呢?

试一试...

static boolean areFilesEqual (Path file1, Path file2) {
    byte[] f1 = Files.readAllBytes(file1); 
    byte[] f2 = Files.readAllBytes(file2);

    if (f1.length != f2.length) 
      return false;
    else {
        for (int i = 0; i < f1.length; i++) {
          if (f1[i] != f2[i])
              return false;
        }
        return true;
    }
}

我不会给你实际的代码,因为你应该有能力将这个逻辑翻译成真正的 Java 代码。如果没有,请先学习 Java 的基础知识。

boolean compareStreams(InputStream is1, InputStream is2) {

    while (is1 is not end of stream && is2 is not end of stream) {
        b1 = is1.read();
        b2 = is2.read();
        if (b1 != b2) {
            return false;
        }
    }

    if (is1 is not end of stream || is2 is not end of stream) { 
    // only 1 of them reached end of stream but not the other
        return false;
    }
    return true;
}

// remember to close streams after use.

如果理解了上面的逻辑,根据Java Input Stream的工作方式,可以进一步缩小为

boolean compareStreams(InputStream is1, InputStream is2) {
    b1 = 0;
    b2 = 0;
    do {
        b1 = is1.read();
        b2 = is2.read();
        if (b1 != b2) {
            return false;
        }
    } while (b1 != -1 && b2 != -1);

    return true;
}