java.util.zip - ZipInputStream 与 ZipInputStream压缩文件

2023-11-22

我有一些关于java.util.zip图书馆。 我们基本上做的是进口和出口许多小部件。以前这些组件是使用单个大文件导入和导出的,例如:

<component-type-a id="1"/>
<component-type-a id="2"/>
<component-type-a id="N"/>

<component-type-b id="1"/>
<component-type-b id="2"/>
<component-type-b id="N"/>

请注意,导入期间组件的顺序是相关的。

现在每个组件都应该占用自己的文件,该文件应该是外在地版本控制、质量检查、等等。我们决定导出的输出应该是一个 zip 文件(包含所有这些文件),导入的输入应该是一个类似的 zip 文件。我们不想破坏我们系统中的拉链。我们不想为每个小文件打开单独的流。我目前的问题:

Q1.愿ZipInputStream确保 zip 条目(小文件)将按照我们使用的导出插入的顺序读取ZipOutputStream?我认为阅读是这样的:


ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null) 
{
       //read from zis until available
}

我知道中央 zip 目录位于 zip 文件的末尾,但其中的文件条目仍然按顺序排列。我也知道依赖顺序是一个丑陋的想法,但我只想牢记所有事实。

Q2。如果我使用ZipFile(我更喜欢)调用对性能的影响是什么getInputStream()数百次?会比慢很多吗ZipInputStream解决方案?拉链仅打开一次并且ZipFile由以下人士支持RandomAccessFile- 它是否正确? 我认为阅读是这样的:


ZipFile zipfile = new ZipFile(argv[0]);
Enumeration e = zipfile.entries();//TODO: assure the order of the entries
while(e.hasMoreElements()) {
        entry = (ZipEntry) e.nextElement();
        is = zipfile.getInputStream(entry));
}

Q3。输入流是否从同一个检索ZipFile线程安全(例如,我可以同时读取不同线程中的不同条目)吗?有任何性能处罚吗?

感谢您的回答!


Q1:是的,顺序将与添加条目的顺序相同。

Q2:请注意,由于 zip 存档文件的结构和压缩,没有一个解决方案是完全流式传输的;他们都做了一定程度的缓冲。如果您查看 JDK 源代码,就会发现实现共享大部分代码。尽管索引确实允许查找与条目相对应的块,但对内容内没有真正的随机访问。所以我认为不应该存在有意义的性能差异;特别是操作系统无论如何都会缓存磁盘块。您可能只想测试性能以通过简单的测试用例来验证这一点。

Q3:我不会指望这一点;但很可能他们不是。如果您确实认为并发访问会有所帮助(主要是因为解压缩受 CPU 限制,因此可能会有所帮助),我会尝试读取内存中的整个文件,通过 ByteArrayInputStream 公开,并构造多个独立的读取器。

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

java.util.zip - ZipInputStream 与 ZipInputStream压缩文件 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为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
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 异步填充数据集

    下面的方法用于填充数据集 如果我们以同步方式调用这个方法 它就可以正常工作 但现在我们需要以异步方式调用这个方法 那么我需要做哪些更改才能使下面的方法正常工作而不会出现任何问题 public DataSet Filldata string
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何在用户输入数据后重新运行java代码

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

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url

随机推荐

  • FTP协议和删除目录

    Filezilla 花了很长时间才从我的网站中删除嵌套目录结构 为什么它必须切换到每个子目录并删除文件 而不是一次性删除整个最顶层的目录 删除文件是 FTP RFC 中唯一支持的命令吗 递归目录删除是否必须由客户端实现 The FTPRFC
  • WPF Clickonce 使用 Microsoft.Net.Sdk 发布

    我可以使用 Sdk Microsoft Net Sdk 成功构建具有新 csproj 格式的 WPF 应用程序 然而 发布该应用程序有点困难 该选项在 IDE 中绝对不可用 但我觉得有点令人费解的是 当您直接调用 msbuild 时 Pub
  • WinForms:SplitContainer 的替代品?

    有人可以建议使用任何替代控件来替换 WinForms SplitContainer 吗 我不喜欢 SplitContainer 在选择和拖动时显示奇怪的虚线条 我想让面板在用户拖动而不是鼠标向上时重新调整大小 并且在拖动拆分器时不显示任何虚
  • 从文本中提取日期

    我正在尝试使用斯坦福 NLP 工具提取日期 8 11 2012 形式文本 Here s a link 对于这个工具的演示 你能帮助我如何训练分类器来识别日期 2012 年 8 月 11 日 我尝试使用训练数据作为 伍德豪斯 PERS 201
  • 无法使用 Android Studio 打印来自 JNI 的日志消息

    我收到的错误 错误 未定义对 android log print 的引用 我已经将此行添加到我的 cpp 文件中 include
  • 使用 Ant 构建器运行所有单元测试

    我的项目中有一个目录 其中包含一堆 JUnit 测试 到目前为止 我已经为每个单元测试使用了单独的目标 例如
  • TypeScript 添加 kebab 大小写类型形成实际的驼峰大小写键

    这是一个示例输入界面 export interface CssProperties alignContent number string null alignItems number string null alignSelf number
  • Double 值相加不一致

    我在使用 eval 实现开发一些工程规则值引擎时遇到了以下问题 Dim first As Double 1 1 Dim second As Double 2 2 Dim sum As Double first second If sum 3
  • 将数组排序到字典中

    我有很多字符串的数组 我不想将它们排序到字典中 因此所有以相同字母开头的字符串都进入一个数组 然后该数组成为键的值 键是其值数组中所有单词开头的字母 Example Key A gt gt Value array apple animal
  • 将 Heroku App 连接到 Atlas MongoDB 云服务

    预测这个问题 我需要得到SSLHeroku 支持 以便在之间建立连接Heroku and Atlas MongoDB 云使用 SSL TLS SSL 连接是要求访问 Atlas MongoDB 云服务 我正在尝试将用 node js 编写的
  • 具有 LIKE 和 IN 条件的参数化查询

    Net 中的参数化查询在示例中始终如下所示 SqlCommand comm new SqlCommand SELECT FROM Products WHERE Category ID categoryid conn comm Paramet
  • Google Fit API,获取每次活动消耗的卡路里

    因此 我正在尝试创建一个连接到 Google Fit 的应用程序 并以一种非常简化的方式向用户显示他们的数据 但我无法找到用户每天每项活动消耗的卡路里 我可以获取一整天的总卡路里以及用户每天进行的每项活动 但不能获取每项活动消耗的卡路里 G
  • MediaStore.Images.Media.getContentUri(String volumeName):Uri 的作用是什么?

    除了这个之外 Content Provider Media API 的公共方法对我来说看起来非常简单 我不确定这有什么作用或如何使用它 任何有关使用的见解将不胜感激 您使用 内部 INTERNAL CONTENT URI和 外部 为EXTE
  • 如何加快 Ruby/Rake 任务的速度

    rake tasks 运行大约需要 18 秒 这只是加载所有任务所需的时间 因此我定义的任何任务都将至少花费这个时间来运行 time rake tasks rake db clean Cleaning up database rake pa
  • log(n) 的 3 个嵌套循环的 Java Big O 表示法

    对于以下嵌套循环 大 O 表示法是什么 for int i n i gt 0 i i 2 for int j n j gt 0 j j 2 for int k n k gt 0 k k 2 count 我的想法是 每个循环是O log2 n
  • Swift 中赋值左侧使用的可选链

    当赋值语句的左侧使用可选链时 这意味着什么 如果可选变量为零 应用程序会崩溃吗 e g cell is a UITableViewCell cell textLabel text Test 有点像短路 当到达第一个 false 值时停止的运
  • Safari Javascript Date() NaN 问题 (yyyy-MM-dd HH:mm:ss)

    我的代码在 Google Chrome 中可以正常工作 但在 Safari 中却不能 我发现我需要转换yyyy MM dd HH mm ss to ISO 8601 但我没有找到解决方案来做到这一点 在线测试链接 http jsfiddle
  • 组功能不支持引用

    我使用此查询时遇到一些问题 看来我无法使用别名作为分组查询的参考 SELECT v V VEHICLEID v V LICENSENO ROUND MAX IF DAY WP DATETIME 1 WP ODOMETER NULL MIN
  • 删除 Android 中操作栏和主屏幕之间的线条或分隔线

    如何删除操作栏和主屏幕之间的线条或分隔线 如何更改 Android 中分隔线的颜色 提前致谢 只需将属性 windowContentOverlay 插入到您的主题中即可 这个方法实在是太简单了
  • java.util.zip - ZipInputStream 与 ZipInputStream压缩文件

    我有一些关于java util zip图书馆 我们基本上做的是进口和出口许多小部件 以前这些组件是使用单个大文件导入和导出的 例如