对ZIP中文件块的随机访问

对ZIP中文件块的随机访问,zip,zipfile,Zip,Zipfile,我一直在试验ZIP格式,特别是对其中内容的随机访问 我知道ZIP支持随机访问,但它只支持在ZIP归档文件中存储文件 我想知道是否可以只在ZIP文件中加载文件的一部分,而不将整个子文件加载到内存中 注意:我只处理非压缩zip文件如果您运行的是Windows或POSIX兼容系统(如Linux),则可以使用内存映射文件。 使用此解决方案,ZIP文件将映射到虚拟内存,这样您就可以迭代其内容,而无需在内存中加载和解析整个文件。 您可以找到更多信息和信息。现在大多数现代操作系统都实现了这一点 虽然内存映射文

我一直在试验ZIP格式,特别是对其中内容的随机访问

我知道ZIP支持随机访问,但它只支持在ZIP归档文件中存储文件

我想知道是否可以只在ZIP文件中加载文件的一部分,而不将整个子文件加载到内存中


注意:我只处理非压缩zip文件

如果您运行的是Windows或POSIX兼容系统(如Linux),则可以使用内存映射文件。 使用此解决方案,ZIP文件将映射到虚拟内存,这样您就可以迭代其内容,而无需在内存中加载和解析整个文件。 您可以找到更多信息和信息。现在大多数现代操作系统都实现了这一点

虽然内存映射文件非常好,因为它可以与许多现有工具集成,但您可以使用低级seek&reads自己读取文件。由于文件未压缩,您可以:

  • 首先,读取zip头(在zip的末尾)以定位目标文件的位置
  • 然后,读取文件头以获得文件的大小,并检查文件是否实际未压缩
  • 最后,检索相对于目标文件数据偏移量的目标数据块(从文件头之后开始)
zip数据格式的普通文件是连续写入的,可以安全地检索


您可以找到有关ZIP文件格式的更多信息。

我确实在POSIX系统(macOS)上工作,但我想要一个跨平台的解决方案。。。这是存在的,还是我应该使用另一种格式?@Jake这种格式支持,只要文件没有被压缩,这里就是这样。我扩展了答案来描述如何检索特定块(在随机位置)。