Java 比较两个相同的PDF时,Apache FileUtils始终返回false

Java 比较两个相同的PDF时,Apache FileUtils始终返回false,java,pdf,fileutils,Java,Pdf,Fileutils,我使用FileUtils来比较两个相同的PDF。代码如下: boolean comparison = FileUtils.contentEquals(pdfFile1, pdfFile2); 尽管两个pdf文件都是相同的,我还是不断得到false。我还注意到,当我执行时: byte[] byteArray = FileUtils.readFileToByteArray(pdfFile1); byte[] byteArrayTwo = FileUtils.readFileToByteArray(

我使用FileUtils来比较两个相同的PDF。代码如下:

boolean comparison = FileUtils.contentEquals(pdfFile1, pdfFile2);
尽管两个pdf文件都是相同的,我还是不断得到
false
。我还注意到,当我执行时:

byte[] byteArray = FileUtils.readFileToByteArray(pdfFile1);
byte[] byteArrayTwo = FileUtils.readFileToByteArray(pdfFile2);
System.out.println(byteArray);
System.out.println(byteArrayTwo);
我得到两个pdf文件的以下字节码:

[B@3a56f631
[B@233d28e3

因此,尽管两个pdf文件在视觉上完全相同,但它们的字节码不同,因此无法通过布尔测试。有没有办法测试相同的pdf文件是否相同?

是的,从两个文件生成md5总和

看看这些总数是否相同

如果是,则您的文件是相同的
这也是肯定的,几乎是100%

如果总和不相同,则
你的文件肯定不同

要生成md5总和,Linux上有一个
md5sum

命令,对于Windows,有一个名为
fciv
的小工具


是,从两个文件生成md5总和

看看这些总数是否相同

如果是,则您的文件是相同的
这也是肯定的,几乎是100%

如果总和不相同,则
你的文件肯定不同

要生成md5总和,Linux上有一个
md5sum

命令,对于Windows,有一个名为
fciv
的小工具


是,从两个文件生成md5总和

看看这些总数是否相同

如果是,则您的文件是相同的
这也是肯定的,几乎是100%

如果总和不相同,则
你的文件肯定不同

要生成md5总和,Linux上有一个
md5sum

命令,对于Windows,有一个名为
fciv
的小工具


是,从两个文件生成md5总和

看看这些总数是否相同

如果是,则您的文件是相同的
这也是肯定的,几乎是100%

如果总和不相同,则
你的文件肯定不同

要生成md5总和,Linux上有一个
md5sum

命令,对于Windows,有一个名为
fciv
的小工具


请注意,您编写的两个标识符

[B@3a56f631
[B@233d28e3
它们是不同的,因为它们属于两个不同的对象。这些是对象标识符,而不是字节码。两个对象在逻辑上可以相等,即使它们不是完全相同的对象(例如,它们具有不同的objectid)


否则,按照peter.petrov编写的那样计算MD5校验和是一个好主意。

请注意,您编写的两个标识符

[B@3a56f631
[B@233d28e3
它们是不同的,因为它们属于两个不同的对象。这些是对象标识符,而不是字节码。两个对象在逻辑上可以相等,即使它们不是完全相同的对象(例如,它们具有不同的objectid)


否则,按照peter.petrov编写的那样计算MD5校验和是一个好主意。

请注意,您编写的两个标识符

[B@3a56f631
[B@233d28e3
它们是不同的,因为它们属于两个不同的对象。这些是对象标识符,而不是字节码。两个对象在逻辑上可以相等,即使它们不是完全相同的对象(例如,它们具有不同的objectid)


否则,按照peter.petrov编写的那样计算MD5校验和是一个好主意。

请注意,您编写的两个标识符

[B@3a56f631
[B@233d28e3
它们是不同的,因为它们属于两个不同的对象。这些是对象标识符,而不是字节码。两个对象在逻辑上可以相等,即使它们不是完全相同的对象(例如,它们具有不同的objectid)


否则,像peter.petrov写的那样计算MD5校验和是个好主意。

不幸的是,对于PDF来说,拥有“完全相同的文件”和拥有“视觉上完全相同”的文件之间有很大的区别。所以第一个问题是你在寻找什么

一个非常简单的例子是,PDF文件中的信息可以压缩或不压缩,并且可以使用不同的压缩过滤器进行压缩。以一个部分内容未压缩的文件为例,并使用ZIP压缩过滤器压缩该内容,将得到两个在字节级别上非常不同但在视觉上非常相同的文件

因此,您可以做许多不同的事情来比较PDF文件:

1) 如果你想检查你是否有“相同的文件”,读入它们并计算某种校验和,正如彼得·彼得罗夫之前回答的那样

2) 如果您想知道文件在视觉上是否相同,最常用的方法是某种渲染。将所有页面呈现为图像并比较图像。实际上,这并不像听起来那么简单,有简单的(例如callas pdfToolbox)和复杂的(例如Global Vision DigitalPage)应用程序都实现了某种“相同”算法(注意,我与这两个供应商都有关联)


因此,首先要很好地定义您到底需要什么,然后仔细选择哪种方法最有效。

不幸的是,对于PDF来说,拥有“完全相同的文件”和拥有“视觉上完全相同”的文件之间有很大的区别。所以第一个问题是你在寻找什么

一个非常简单的例子是,PDF文件中的信息可以压缩或不压缩,并且可以使用不同的压缩过滤器进行压缩。以一个部分内容未压缩的文件为例,并使用ZIP压缩过滤器压缩该内容,将得到两个在字节级别上非常不同但在视觉上非常相同的文件

因此,您可以做许多不同的事情来比较PDF文件:

1) 如果你想检查你是否有“相同的文件”,读入它们并计算某种校验和,正如彼得·彼得罗夫之前回答的那样

2) 如果您想知道文件在视觉上是否相同,最常用的方法是某种渲染。将所有页面呈现为图像并比较图像。在p