2011-11-18 31 views
3

Zip64 format,有一种叫做包含偏移到中央目录记录的Zip64结尾中央目录定位器Zip64中央目录定位器结束的目的是什么?

Zip64结尾报头。为什么你需要这个记录时,你可以通过它的幻数搜索'中央目录'的记录'的zip64结束?

编辑:请注意,查找定位器的唯一方法是查找定位器的幻数。这里的要点是,为什么还要用魔法数字直接搜索zip64 end of central directory记录时,为什么还要在第一个位置搜索带有定位符魔术数字的定位器?

+0

中央目录定位器的zip64结尾是中央目录记录结束前的20个字节,因此您不必搜索它,只需检查它是否存在。它实际上是一个疯狂的规范中的一个理想记录。 – serbaut

回答

4

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

在做了一些额外的实现之后,我认为最重要的是要注意“特殊用途数据可能驻留在zip64可扩展数据扇区字段”(在中央目录记录的Zip64末尾之后)。可能存在多个这些字段,每个字段都以2个字节的标头ID开头,接着是4个字节的数据大小 - 后跟实际的“特殊用途数据” - 允许多个2^32字节(4 GB)的数据。虽然这看起来极端,但这样做肯定会导致需要在定位器和“中央目录记录的Zip64末端”之间跨越磁盘。这里的大量数据不仅需要更长的时间来扫描签名,而且意外地发现最小4字节/ 32位“中央目录的zip64结尾”签名的随机机会将随着数据的长度而增加。

“查找定位器的唯一方法是查找定位器的幻数”是不正确的。如果存在,它应该在“中央目录记录结束”之前。从那里读回20个字节,然后读取下4个字节应该产生“中央dir定位符签名的zip64结束” - 可以用作完整性检查(而不是扫描它)。

+0

您是否知道查找定位符的唯一方法是查找它的幻数? – JosephH

+0

我需要重新阅读规范,并进一步思考(我对规范的zip64部分还没有做太多的工作) - 但是如果它与规范的其余部分相同,那么您也可以通过使用其他知名位置的相对偏移量来找到定位器(例如,文件末尾,其中“中央目录签名的末尾”确实有点需要搜索。) – ziesemer

+0

您仍然有如何查找'End of Central Directory'部分,因为它有这个愚蠢的可变大小的注释字段...所以你似乎必须扫描,直到找到“End of Central Directory”的幻数。 – Tower

相关问题