如何使用FileInputStream在Java中比较字节与字节
任何人都可以编写伪代码来比较Java中的字节。我知道我们使用read()来逐字节读取。但是我们如何进行比较呢 试试看如何使用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
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”:字节读取+“字节”;