I/O 入门

高效比较两个文件,无需将其加载到内存中。

✕ Java 8
// Compare two files byte by byte
byte[] f1 = Files.readAllBytes(path1);
byte[] f2 = Files.readAllBytes(path2);
boolean equal = Arrays.equals(f1, f2);
// loads both files entirely into memory
✓ Java 12+
long pos = Files.mismatch(path1, path2);
// -1 if identical
// otherwise: position of first difference
发现此代码有问题? 告诉我们。

内存高效

不将整个文件加载到字节数组中。

📏

简洁

一行替代复杂的手动比较循环。

🎯

差异位置

返回差异的确切字节偏移量。

旧方式
手动字节比较
现代方式
Files.mismatch()
自 JDK
12
难度
入门
Files.mismatch()
可用

自 JDK 12 起广泛可用(2019 年 3 月)

Files.mismatch() 返回第一个字节差异的位置,如果文件相同则返回 -1。它不将文件加载到内存,效率比手动字节数组比较高得多。

分享 𝕏 🦋 in