【发布时间】:2011-01-20 20:55:46
【问题描述】:
我遇到了一个问题,即 org.apache.commons.io.FileUtils.copyFile(File, File) 生成的文件略有不同。当我将这些文件与 bsdiff 或在编辑器中进行比较时,我可以看出它们是不同的。某些字节被复制为问号。例如 0200(八进制)被复制为? (八进制 077)。
因此,我创建了一个测试用例以包含在错误报告中。我制作了可执行文件的副本,然后使用 FileUtils.checksumCRC32(File) 进行比较。出乎意料的是,这些文件具有相同的校验和。然后我通过遍历每个文件的 FileInputStream 来比较它们。这也断言文件是相同的。
文件肯定不同。一个运行,另一个不运行。 bsdiff 产生两个文件的差异。我可以通过肉眼检查文件来判断某些字节被错误地复制了。
但是,对于 JVM,这些文件是相同的。关于我为什么会观察到这种行为的任何想法?
系统信息: 视窗 7、64 位; JVM 1.6.0_22,32 位
【问题讨论】:
-
听起来你并没有复制你认为的文件。看来该文件已被复制为文本文件,而您的二进制副本正在其他地方。
-
另外,在文件上运行 md5sum.exe - 你的工具(编辑器,bsdiff)可能会以某种方式混淆一个文件是二进制文件,另一个文件是文本文件(例如,基于文件结尾或元数据附在文件上)
标签: java jvm apache-commons-io