Java/zip:为什么 .jar 文件的创建是不确定的?

2023-12-22

我从未真正研究过它,但现在我意识到我无法轻松构建两个相同的 .jar 文件。

我的意思是,如果我构建两次,而不更改任何内容,我会得到完全相同的大小,但校验和不同.jar.

所以我很快进行了一些测试(基本上解压, 排序-n -k 5然后diff'ing) 来查看所有文件inside.jar 相同,但 .jar 不同。

所以我做了一个简单的测试.zip文件并发现这个:

... $ zip 1.zip a.txt
... $ zip 2.zip a.txt
... $ ls -l ?.zip
-rw-rw-r-- 1 webinator webinator 147 2010-07-21 13:09 1.zip
-rw-rw-r-- 1 webinator webinator 147 2010-07-21 13:09 2.zip

(完全一样.zip文件大小)

... $ sha1sum ?.zip
db99f6ad5733c25c0ef1695ac3ca3baf5d5245cf  1.zip
eaf9f0f92eb2ac3e6ac33b44ef45b170f7984a91  2.zip

(不同的 SHA-1 和,让我们看看为什么)

$ hexdump 1.zip -C > 1.txt

$ hexdump 2.zip -C > 2.txt

$ diff 1.txt 2.txt 
3c3
< 00000020  74 78 74 55 54 09 00 03  ab d4 46 4c*4e*d5 46 4c  |txtUT.....FLN.FL|
---
> 00000020  74 78 74 55 54 09 00 03  ab d4 46 4c*5d*d5 46 4c  |txtUT.....FL].FL|

解压这两个 zip 文件肯定会返回我们独特的文件。

问:这是为什么呢? (我自己来回答)


(回答我自己)正是因为.zip文件格式将创建和修改时间保存在其标头中。

如果您确实想创建两个相同的.zip (or .jar),你必须让第二个相信它是与第一个完全同时创建/修改的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java/zip:为什么 .jar 文件的创建是不确定的? 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐

  • 实体框架:过滤导航属性

    我正在使用实体框架 Code First 并且我有下一个上下文 至少是提取 public class TestContext DbContext public DbSet
  • 具有默认空选项的 ASP.NET MVC 下拉列表

    如果下拉列表没有选定的值 是否有办法包含默认的空选项 或文本 下面的代码会将 string Empty 添加到 ViewData Menu 项中指定的 SelectList 或 IEnumerable 之前 选择将有 id 和名称MenuI
  • sed 给我 ": 意外的 EOF (pending }'s) 错误,我不知道为什么

    我正在尝试将 GNU sed 命令移植到 BSD sed 在 OSX 中 命令是 cat 1 sed n e H x tapPrintTapOutputSedPattern p e tapPrintTapOutputSedPattern x
  • 如何在不使用 Google Apps 的情况下授权 Google Drive 服务帐户访问 Google 帐户?

    我想使用 Google 云端硬盘作为我正在制作的网站的准 CMS 以便内容所有者可以使用 Google 云端硬盘编辑其内容 我想使用可以访问 Google 云端硬盘的特定用户帐户 在撰写本文时 服务帐户无法直接访问 Google 云端硬盘
  • 现在在 Dart 中有两种使用 typedef 的方法吗?

    我看到多种形式typedef整个 dart 和 flutter 库 但我不太明白它的意义 Framework dart中有这个例子 typedef ElementVisitor void Function Element element 还
  • 仅比较日期和月份与mysql中的日期字段

    如何仅比较日期和月份与mysql中的日期字段 例如 我在一张表中有一个日期 2014 07 10 同样 另一个日期2000 07 10在另一张桌子上 我只想比较日期字段上的日期和月份是否相等 我尝试过这种格式 但我无法得到答案 select
  • 如何使用 'in' 运算符返回 0 而不是 null

    我有三张桌子 文本 行中的文本 trigram 所有文本行的trigram text trigram 文本行包含的三元组 中间表 当我执行这个时 select count coalesce text id 0 text id from te
  • 带优先级队列的 Dijkstra 算法

    在我的 Dijkstra 算法的实现中 我有 1 个包含所有节点的数组和 1 个包含所有节点的优先级队列 每当一个节点出队时 我都会用新的距离和它的来源更新所有相邻节点 这样我就可以回溯路径 优先级队列中的节点将更新为新距离 数组中的节点将
  • 包“@angular/cli”不是依赖项

    当我尝试运行命令时出现以下错误 ng update angular cli angular core allow dirty Repository is not clean Update changes will be mixed with
  • 如何对 BSD 套接字进行单元测试 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 BSD 套接字在 Ubuntu 中编写基于服务器 客户端的 C 应用程序 我使用 Google C 测试框架作为我的单元测
  • Mailjet Vars 空白数组引发错误

    array low price low stock goods gt 在我的邮件模板中 for item in var low price low stock goods tr td item good name td td item va
  • MySQL:您的 SQL 语法错误 |限制 0, 25

    我不明白这个错误 请大家帮助我 为什么我收到这个错误 我的查询有问题吗 这是错误 1064 你的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解要使用的正确语法 第 7 行 LIMIT 0 25 附近 这是我的查询
  • 如何将 Pandas DF 中的列表转换为字符串?

    我有一个熊猫数据框 其中一列包含一个列表 我希望该列是单个字符串 例如我的清单 one two three 应该简单地是 one two three df col df col astype str apply lambda x join
  • 使用 React js Modal 的动态内容

    我想使用 React js 模态获取动态内容我正在使用包react responsive modal 首先我通过地图渲染所有帖子 现在我希望当我单击单个帖子时 模式应该弹出并仅显示该特定帖子的标题和正文 现在我不知道如何在模态中获取单个帖子
  • 有没有办法将 C# 序列化对象读取到 Python 中?

    我有一个包含 C 序列化对象的二进制文件 我可以用 python 读取内容 但得到的结果类似于 T x00 x00 x00Test Jobs GenerateJobRequest POC Server xca x02 xa2 x02 t x
  • 去虚拟化非最终方法

    假设我有一个如下所示的类设置 class A public virtual void foo printf default implementation n class B public A public void foo override
  • CNContactViewController 取消按钮不起作用

    我正在尝试使用内置的新联系人 UI 但使用取消按钮时出现意外行为 下面的代码可以运行并调用新的联系人屏幕 但取消按钮只会清除屏幕条目 而不会从新的联系人屏幕中取消 在内置联系人应用程序中 点击取消将返回到联系人列表屏幕 我想要取消按钮来关闭
  • CSS将一个正方形分成4个三角形

    我目前正在尝试将一个正方形变成 4 个大小相等且具有悬停事件的三角形 我正在创建这样的三角形 right left top bottom position relative width 26px right before position
  • 升级到 Django 1.11 后,append_slash 不再起作用

    在 Django 1 9 和 Python 3 4 中 默认的 APPEND SLASH 工作正常 即我可以输入 localhost 8000 ideatree videos 并且会添加尾部斜杠 升级到 Django 1 11 和 Pyth
  • Java/zip:为什么 .jar 文件的创建是不确定的?

    我从未真正研究过它 但现在我意识到我无法轻松构建两个相同的 jar 文件 我的意思是 如果我构建两次 而不更改任何内容 我会得到完全相同的大小 但校验和不同 jar 所以我很快进行了一些测试 基本上解压 排序 n k 5然后diff ing