gpt4 book ai didi

c++ - 即时从流式存档中解压和提取文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:20 24 4
gpt4 key购买 nike

我正在编写一个浏览器插件,类似于 Flash 和 Java,它会在文件(.jar 或 .swf)显示后立即开始下载。 Java 等待(我相信)直到加载整个 jar 文件,但 Flash 不会。我想要同样的能力,但有一个压缩的存档文件。我想在下载解压所需的字节后立即访问存档中的文件。

例如,我正在将存档下载到内存缓冲区中,一旦第一个文件可以解压,我就希望能够将其解压(也解压到内存缓冲区中)。

是否有支持此功能的格式/库?

编辑:如果可能的话,我更喜欢使用单一文件格式而不是单独的文件格式来进行压缩和归档,例如 gz/bzip2 和 tar。

最佳答案

这里有两个问题

  1. 如何编写代码。

  2. 使用什么格式。

关于文件格式,您不能使用.ZIP 格式,因为.ZIP 将目录放在文件末尾。这意味着您必须下载整个文件才能知道其中的内容。 Zip 具有您可以扫描的 header ,但这些 header 不是文件中内容的正式列表。

Zip 明确地将目录放在末尾,因为它允许快速添加文件。

假设您有一个 zip 文件,其中包含文件“a”、“b”和“c”。你想更新'c'。在 zip 中读取目录、附加新 c、写入指向新“c”的新目录是完全有效的,但旧的“c”仍在文件中。如果您扫描标题,您最终会看到旧的“c”,因为它仍在文件中。

附加功能是 zip 的明确设计目标。它起源于 1980 年代,当时一个 zip 可以跨越多个软盘。如果您需要添加一个文件,那么为了重写整个 zip 文件而必须读取所有 N 个光盘会很糟糕。因此,该格式只允许您将更新的文件附加到末尾,这意味着它只需要最后一张光盘。它只是读取旧的 TOC,附加新文件,写入新的 TOC。

Gzipped tar 文件没有这个问题。 Tar 文件存储头文件、文件、头文件,并且压缩在其之上,因此可以解压缩为下载的文件并在文件可用时使用这些文件。您可以在 Windows 中使用 winrar(商业)或 7-zip(免费)轻松创建压缩的 tar 文件,在 linux、osx 和 cygwin 上使用 tar 命令。

关于代码的编写,

O3D 做到了这一点并且是开源的,因此您可以查看代码 http://o3d.googlecode.com

解压代码在o3d/import/cross/...

它使用一些可以在 o3d/plugin/cross 中找到的胶水来定位 NPAPI

关于c++ - 即时从流式存档中解压和提取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1159992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com