这里有2个问题
如何编写代码。
使用什么格式。
在文件格式上,您不能使用 .ZIP 格式,因为 .ZIP 将目录放在文件末尾。这意味着您必须先下载整个文件,然后才能知道其中的内容。Zip 有您可以扫描的标题,但这些标题不是文件中内容的官方列表。
Zip 明确地将目录放在最后,因为它允许快速添加文件。
假设您有一个包含文件“a”、“b”和“c”的 zip 文件。你想更新'c'。在 zip 中读取目录、附加新的 c、写入指向新的“c”但旧的“c”仍在文件中的新目录是完全有效的。如果您扫描标题,您最终会看到旧的“c”,因为它仍在文件中。
附加功能是 zip 的明确设计目标。它来自 1980 年代,当时一个 zip 可以跨越多个软盘。如果您需要添加一个文件,那么为了重新写入整个 zip 文件而必须读取所有 N 盘是很糟糕的。因此,该格式只允许您将更新的文件附加到末尾,这意味着它只需要最后一张光盘。它只是读取旧的 TOC,附加新文件,写入新的 TOC。
Gzipped tar 文件没有这个问题。Tar 文件存储头、文件、头文件,并且压缩是最重要的,因此可以将其作为下载的文件解压缩并在文件可用时使用它们。您可以在 windows 中使用 winrar(商业)或 7-zip(免费)轻松创建 gzipped tar 文件,在 linux、osx 和 cygwin 上使用 tar 命令。
关于要写的代码,
O3D does this and is open source so you can look at the code
http://o3d.googlecode.com
The decompression code is in o3d/import/cross/...
It targets the NPAPI using some glue which can be found in o3d/plugin/cross