在所有平台上,pack200的解压缩是否确定且相同?

问题描述

| 我想将我的20罐应用程序分发为pack200文件,但为了验证,我还需要提供文件校验和。 因为我很偏执(感谢您,JWS),所以我还想对解压缩的文件进行校验和检查。 在所有平台上,pack200的解压缩是否具有确定性并给出相同的结果(Win / Mac / Linux跨32/64位)? 换句话说,我可以在一台计算机上解压缩文件,计算它们的校验和,并期望如果在其他计算机上解压缩它们总是相同的吗? 编辑:感谢您的评论。我正在寻找一些严格的规范来确认或否认这一点。 做出假设(即使基于在几台机器上进行的测试)也意味着风险。 跨平台和Java版本的实现可能有所不同。甚至同一个实现也可以给出不同的结果(是否想到ZIP目录中的项目顺序?)。这就是为什么我要问所有平台和Java版本是否具有相同性以及确定性。 如果无法确认或拒绝,请问该后续问题。减压后如何验证罐子有效?考虑到半成品,伽马射线会破坏文件中的单个位,反之亦然。     

解决方法

           我正在寻找一些严格的规范来确认或否认这一点。 @Travis的回答说,重建的类文件与原始类文件不是逐字节相同的,这(显然)意味着JAR文件也不相同。 此外,没有文档说ѭ0会在所有平台上产生相同的JAR文件,我不希望如此。 (首先,不同的平台将运行不同版本的
unpack200
...)   如果无法确认或拒绝,请问该后续问题。减压后如何验证罐子有效?考虑到半成品,伽马射线会破坏文件中的单个位,反之亦然。 我也不认为有办法做到这一点。如果我们假设重新生成的JAR文件可能与平台有关,那么我们就没有基准来生成校验和。 我认为最好的选择是发送pack200文件的高质量校验和,并相信unpack200可以正常工作,或者在失败时设置非零退出代码……就像任何正确编写的实用程序一样。 顺便说一句,如果您担心随机错误,那么当JVM从JAR文件中加载代码时,如何检测“宇宙射线”的影响?明智的方法是使用ECC内存等,然后将其留给硬件处理。     ,        认为这就是您要寻找的。   ...但是,对于任何给定的Pack200存档,都需要每个解压缩器为传输的每个类文件生成特定的字节映像。为了使压缩器能够传输信息(例如消息摘要),该要求与解压缩器有关,该信息与所传输的类文件的最终字节内容有关。本节介绍了对每个解压缩器的限制,这些限制使其输出文件的字节内容成为其输入的定义明确的功能。 这意味着您可以在这里做您想做的事。 JNF / Pack200通过取出在类之间共享的常量并智能地压缩.class文件来工作-但是该标准的这一部分说,尽管可以以几种方式重建类文件,但这将导致无法验证这些文件带有摘要。为避免该问题,Pack200明确指定解码的工作方式-因此,虽然输出.class文件可能与输入.class文件不同,但每个Pack200解压缩器的输出.class文件将与其他Pack200解压缩器的输出匹配。输出.class文件。 因此,最好的选择是将\ 200与Pack200一起打包,解压缩,然后执行MD5或类似的摘要算法,然后使用该算法来验证解压缩的文件。 希望这能回答你的问题!     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...