逐块(字节)java比较文件

时间:2014-11-09 11:08:19

标签: java compare bytearray block mappedbytebuffer

我尝试逐块比较两个文件。如果块是等于 - 获取下一个块并进行比较。 如果最后的块是等于 - 返回true;所有其他变体 - 返回false。 我不明白如何在下一个区块中找到正确的方法以及如何获得文件的结尾。

private static boolean getBlocks(File file1, File file2, int count) throws IOException {
    RandomAccessFile raf1 = new RandomAccessFile(file1, "r");
    RandomAccessFile raf2 = new RandomAccessFile(file2, "r");
    int point = count * 512;
    FileChannel fc1 = raf1.getChannel();
    FileChannel fc2 = raf2.getChannel();
    MappedByteBuffer buffer1 = fc1.map(FileChannel.MapMode.READ_ONLY, point, 512);
    MappedByteBuffer buffer2 = fc2.map(FileChannel.MapMode.READ_ONLY, point, 512);
    byte[] bytes1 = new byte[512];
    byte[] bytes2 = new byte[512];
    buffer1.get(bytes1);
    buffer2.get(bytes2);
    if (bytes1.length == bytes2.length) {
        for (int i = 0; i < bytes1.length; i++) {
            if(bytes1[i] != bytes2[i]) {
                return false;
            }
        }
        if (true) {
            count++;
            getBlocks(file1, file2, point);
        }
    }
    buffer1.clear();
    buffer2.clear();
    return true;
}

1 个答案:

答案 0 :(得分:0)

在EOF到达之前,你可以逐字节地读取文件:http://www.java2s.com/Code/Java/File-Input-Output/Testingforendoffilewhilereadingabyteatatime.htm

使用MappedByteBuffer时,这应该是答案:https://stackoverflow.com/a/12509314/1321564