【发布时间】:2019-08-06 15:03:23
【问题描述】:
我正在比较两个具有相同内容但具有不同主机操作系统(UNIX / FLAT)的 jar 文件,因此它们得到不同的 CRC。如何在不提取它们的情况下比较它们?
我不想提取 jar 文件,因为实际上应用程序在两个 ear 文件之间进行比较:每个 ear 是具有 300 多个 jar 文件的项目的一个版本(旧版本/新版本)。 我曾经使用 FileUtils.contentEquals 比较两个 jar,它适用于正常情况(具有相同主机操作系统的示例 jar 文件)。
boolean isTwoEqual = FileUtils.contentEquals(File1, File2);
当两个文件的内容相同时,我希望isTwoEqual 的输出为true,但实际输出为false,因为它们具有不同的主机操作系统,因此它们得到不同的CRC 码。
【问题讨论】:
-
据我所知这是不可能的。 CRC 不会挑挑拣拣。它基于文件中的所有位。任何更改都会为您提供不同的代码。但也许有人有一个解决方案,可以以实际可行的不同方式解决问题。
-
@Jeff Grigg 的回答很好。几乎可以肯定,不同之处在于行尾字符。您需要以一种或另一种方式打开罐子并比较它们而忽略它们。罐子是 zip 文件。正如 Jeff 所说,您可以解压缩内容并按字符比较流,而无需编写文件。它仍然会占用大量资源(cpu 和 ram),但实际上别无选择。您还需要一种推断文件是文本数据还是非文本数据的方法。试图在数据文件中查找行并去除行尾也会得到错误的答案。
标签: java crc file-comparison