Zip64'中央目录定位器结束'的目的是什么?

Jos*_*phH 5 zip file-format

Zip64格式中,有一个名为的标头

Zip64中心目录定位器的末尾

包含中央目录记录的zip64末尾的偏移量.当您可以通过其幻数搜索'zip64 end of central directory'记录时,为什么需要此记录

编辑:请注意,查找定位器的唯一方法是查找定位器的幻数.这里的重点是,当你可以直接搜索zip64 end of central directory记录的神奇数字时,为什么还要首先用定位器幻数来搜索定位器呢?

zie*_*mer 5

直接导航到文件中的字节偏移比搜索幻数快得多.此外,无法保证在数据的其他位置找不到幻数,如果它从无效但"假定正确"的位置开始读取,则可能导致实现从不正确的数据中读取.

在我自己做了一些额外的实现之后,我认为最值得注意的是"特殊用途数据可能存在于zip64可扩展数据扇区字段中"(在中心目录记录的Zip64末尾之后).这些字段中可能存在多个字段,每个字段的头标识为2个字节,后跟4个字节的数据大小 - 后跟实际的"特殊用途数据" - 允许多个2 ^ 32字节(4 GB)的数据.虽然这看起来很极端,但这样做肯定会导致需要在定位器和"中心目录记录的Zip64端"之间跨越磁盘.此处的大量数据不仅需要更长的时间来扫描签名,而且意外找到最小4字节/ 32位"zip64 end of central directory"签名的随机机会将随着数据的长度而增加.

"查找定位器的唯一方法是查找定位器的幻数"并非如此.如果存在,则应该在"中央目录记录结束"之前.从那里读回20个字节,然后读取接下来的4个字节应该产生"中央目录定位器签名的zip64端" - 可以用作健全性检查(而不是扫描它).

  • 你仍然有如何找到“中央目录结尾”部分的问题,因为它有这个愚蠢的可变大小的注释字段......所以看来你必须扫描直到找到“中央目录结尾”的幻数`. (2认同)