如何使用 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;
}
任何人都可以编写伪代码来比较 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;
}