代码对比
✕ 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
难度
入门
JDK 支持
Files.mismatch()
可用
自 JDK 12 起广泛可用(2019 年 3 月)
工作原理
Files.mismatch() 返回第一个字节差异的位置,如果文件相同则返回 -1。它不将文件加载到内存,效率比手动字节数组比较高得多。
相关文档