Files.mismatch()
ファイルをメモリに読み込まずに効率的に比較する。
コード比較
✕ 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
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
メモリ効率的
ファイル全体をバイト配列に読み込みません。
差分を特定
最初の不一致の正確なバイト位置を返します。
1回の呼び出し
手動のバイト配列比較ロジックが不要です。
旧来のアプローチ
手動バイト比較
モダンなアプローチ
Files.mismatch()
JDKバージョン
12
難易度
初級
JDKサポート
Files.mismatch()
利用可能
JDK 12(2019年3月)以降、広く利用可能
仕組み
Files.mismatch()は最初に異なるバイトの位置を返し、ファイルが同一の場合は-1を返します。遅延読み取りを行い、最初の違いで処理を短絡します。
関連ドキュメント