Java 按字节块比较两个文件
我试图通过字节块比较两个文件。一块一块。但是我的循环树有问题Java 按字节块比较两个文件,java,compare,byte,bytearray,block,Java,Compare,Byte,Bytearray,Block,我试图通过字节块比较两个文件。一块一块。但是我的循环树有问题 public void compare() { File file1 = arrayOfFiles.get(i); File file2 = arrayOfFiles.get(y); if (file1.length() != file2.length()) { break; } else {
public void compare() {
File file1 = arrayOfFiles.get(i);
File file2 = arrayOfFiles.get(y);
if (file1.length() != file2.length()) {
break;
}
else
{
for (int z = 0; ; z++) {
byte[] b1 = getParts(file1, z);
byte[] b2 = getParts(file2, z);
if (b1.length != b2.length) {
break;
}
else
{
for (int x = 0; ; x++) {
if (b1[x] != b2[x]) {
break;
}
else
{
//how can I find the end of file? and compare last [x] of b1 and b2?
}
}
}
}
}
}
private static byte[] getParts(File file, int z) throws IOException {
byte [] bytes = new byte[1024];
int point = z * 1024;
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel fc = raf.getChannel();
MappedByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, point, 1024);
buffer.get(bytes);
buffer.clear();
return bytes;
}
是否有其他方法可以按字节比较两个文件,并使用不同大小的块进行比较?要比较文件的最后一个字节块,您的程序可能会从较小的修改中受益。从最后一个块开始迭代块。将for子句更改为向后迭代,如下所示
import java.lang.Math;
import java.nio.channels.FileChannel;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
public class Compare
{
public static final int BLOCK_SIZE = 1024;
public boolean compare(File file1, File file2)
{
//File file1 = arrayOfFiles.get(i);
//File file2 = arrayOfFiles.get(y);
boolean equal = file1.length() != file2.length();
for (int z = getSizeInBlocks(file1) - 1; equal && 0 <= z ; z--)
{
MappedByteBuffer b1 = getParts(file1, z);
MappedByteBuffer b2 = getParts(file2, z);
if (b1.remaining() != b2.remaining())
{
equal = false;
break;
}
else
{
for (int x = getBlockSize() - 1; equal && 0 <= x; x--)
{
if (b1[x] != b2[x])
{
equal = false;
break;
}
else
{
//how can I find the end of file? and compare last [x] of b1 and b2?
}
}
}
}
return equal;
}
private static int getSizeInBlocks(File file)
{
return (int) Math.ceil((double)getBlockSize()/file.length());
}
private static int getBlockSize()
{
return BLOCK_SIZE;
}
private static ByteBuffer getParts(File file, int z)
throws IOException
{
int point = z * getBlockSize();
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel fc = raf.getChannel();
MappedByteBuffer buffer = fc.map(
FileChannel.MapMode.READ_ONLY,
point,
getBlockSize());
return buffer;
}
}
import java.lang.Math;
导入java.nio.channels.FileChannel;
导入java.io.File;
导入java.io.IOException;
导入java.io.RandomAccessFile;
导入java.nio.MappedByteBuffer;
公共类比较
{
公共静态最终整型块大小=1024;
公共布尔比较(文件file1、文件file2)
{
//File file1=arrayOfFiles.get(i);
//File file2=arrayOfFiles.get(y);
布尔值等于=file1.length()!=file2.length();
对于(int z=getSizeInBlocks(file1)-1;等于&0