当前位置: 首页 > 知识库问答 >
问题:

为什么某些zip文件有未知的文件内容

陶福
2023-03-14

我在这里偶然发现了这个问题

根据ZipEntry的java文档,有时请求zipfile条目的大小只需返回-1

但是,运行命令

$ unzip -l b17c024e-89f1-42f7-a546-91d46610cedb.epub 
Archive:  b17c024e-89f1-42f7-a546-91d46610cedb.epub
  Length     Date   Time    Name
 --------    ----   ----    ----
       20  01-27-12 11:17   mimetype
     2378  04-20-12 10:12   OEBPS/hayat-ghayr.html
     6436  02-06-12 11:06   OEBPS/content.opf
   112579  01-27-12 11:25   OEBPS/images/978-614-425-313-7-hayat-ghayr-cover.png
   182575  01-27-12 11:25   OEBPS/images/978-614-425-313-7-hayat_fmt.png
     7757  01-27-12 11:21   OEBPS/template.css
     5643  01-27-12 11:18   OEBPS/hayat-ghayr-2.html
    20144  01-27-12 11:17   OEBPS/hayat-ghayr-1.html
    65543  01-27-12 11:17   OEBPS/hayat-ghayr-3.html
    59434  01-27-12 11:17   OEBPS/hayat-ghayr-4.html
    66768  01-27-12 11:17   OEBPS/hayat-ghayr-5.html
    49117  01-27-12 11:17   OEBPS/hayat-ghayr-6.html
    65346  01-27-12 11:17   OEBPS/hayat-ghayr-7.html
    74196  01-27-12 11:17   OEBPS/hayat-ghayr-8.html
    73998  01-27-12 11:17   OEBPS/hayat-ghayr-9.html
    61031  01-27-12 11:17   OEBPS/hayat-ghayr-10.html
    68297  01-27-12 11:17   OEBPS/hayat-ghayr-11.html
    72084  01-27-12 11:17   OEBPS/hayat-ghayr-12.html
     2386  01-27-12 11:17   OEBPS/hayat-ghayr-13.html
    61132  01-27-12 11:17   OEBPS/hayat-ghayr-14.html
    46320  01-27-12 11:17   OEBPS/hayat-ghayr-15.html
    32673  01-27-12 11:17   OEBPS/hayat-ghayr-16.html
    88584  01-27-12 11:17   OEBPS/hayat-ghayr-17.html
    56474  01-27-12 11:17   OEBPS/hayat-ghayr-18.html
    52840  01-27-12 11:17   OEBPS/hayat-ghayr-19.html
    80022  01-27-12 11:17   OEBPS/hayat-ghayr-20.html
    50781  01-27-12 11:17   OEBPS/hayat-ghayr-21.html
     2765  01-27-12 11:17   OEBPS/hayat-ghayr-22.html
      265  01-27-12 11:17   META-INF/container.xml
    54942  01-27-12 11:17   OEBPS/images/277.png
     5549  01-27-12 11:17   OEBPS/toc.ncx
     1072  03-23-12 13:28   iTunesMetadata.plist
 --------                   -------
  1529151                   32 files

显示所有章节的内容长度。。而且,如果我们解压同一个文件,并用更强大的压缩再次解压。。zipFile java命令返回正确的内容大小

这是zip库的错误还是原始压缩错误?我们怎么知道?

查看如何从内存中的流式zip文件访问zipEntry

共有1个答案

魏彦
2023-03-14

ZIP将元html" target="_blank">数据存储在归档文件中的几个不同位置(“本地文件头”、“中心目录”,有时还有“数据描述符”)。只有“本地文件头”位于文件内容的前面,“中心目录”位于归档文件的最末端。只有“中央目录”才是完全正确的,在“本地文件头”中不指定任何大小是完全有效的。

参见中的第4.4.8/4.4.9节https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT这是关于大小字段的

如果设置了通用位标志的第3位,则这些字段在本地标头中设置为零,正确的值放在数据描述符和中央目录中。

“数据描述符”紧跟在条目的压缩内容之后——因此在从不可查找流读取条目的实际内容之前不可用。

使用ZipArchiveInputStream时,您会在读取“本地文件头”后立即获取ZipEntry(因为底层流可能无法查找),因此大小信息可能会丢失。ZipFile在封面下使用随机访问文件,并且可以读取“中央目录”-unzip和朋友也是如此-因此他们知道的比ZipArchiveInputStream更多。

 类似资料:
  • 项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时

  • 问题内容: 我正在尝试创建一个简单的Java程序,该程序从zip文件中的文件读取和提取内容。压缩文件包含3个文件(txt,pdf,docx)。我需要阅读所有这些文件的内容,并且为此使用了Apache Tika。 有人可以帮我实现此功能。到目前为止,我已经尝试过了,但是没有成功 代码段 问题答案: 如果你想知道如何从每个文件中获取文件内容,ZipEntry那实际上很简单。这是一个示例代码: 一旦拥有

  • 我使用Ubuntu OS中的RawTherapee应用程序将RAW文件转换为TIF。 是否存在任何专有问题或与Adobe名称使用有关的任何问题?我喜欢使用开源工具和应用程序。请把你关心的问题告诉我。

  • 我试图创建一个简单的java程序,从zip文件中读取并提取文件内容。Zip文件包含3个文件(txt、pdf、docx)。我需要阅读所有这些文件的内容,为此我正在使用ApacheTika。 有人能帮我实现这个功能吗。到目前为止,我已经试过了,但没有成功 代码片段

  • 问题内容: 我在这篇文章中找到了这个ZipUtils类: 如何使用java压缩文件夹本身 我对其进行了修改,以便可以传递一个zip文件名。但是,它的唯一工作方式是使用硬编码的静态字符串。从数据库中获取zippedFile字符串。我已经将dbZippedFile和hardcodedZippedFile进行了比较,它们都是相同的……也许在FileOutputStream中使用非静态字符串会产生问题吗?