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

如何使用FileInputStream在Java中比较字节与字节,java,fileinputstream,Java,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 f

任何人都可以编写伪代码来比较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;
    }
}
静态布尔值arefileequal(路径文件1,路径文件2){
字节[]f1=文件。readAllBytes(文件1);
字节[]f2=文件。readAllBytes(文件2);
如果(f1.长度!=f2.长度)
返回false;
否则{
对于(int i=0;i
我不会给您实际的代码,因为您应该能够将此逻辑转换为真正的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输入流的工作方式,可以进一步缩小到

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;
}

我不明白这个问题。你能举个例子吗?我有两个文件,我正试图比较文件中的内容从一个字节到另一个字节,这样我就知道文件是否被更改了。ThanksI不明白您不清楚的是什么:只要在循环的每次迭代中从两个流中读取1个字节,如果每个流中的字节不同,那么它是相同的。如果字节相同,请继续处理下一对字节。循环,直到其中一个到达文件的末尾。如果此时,两者都是文件的结尾,那么它们是相同的,如果不是,它们是不同的。这甚至不是Java。路径和文件不在正常库中。对于较大的文件,请添加心跳信号以写入进程仍在工作的内容,例如字符串unitMessage=(bytesRead>>29)>0?(字节读>>29)+“GB”:(字节读>>19)>0?(字节读>>19)+“MB”:(字节读>>10)>0?(字节读取>>10)+“KB”:字节读取+“字节”;