首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bzip2应用程序中解压缩iOS

在bzip2应用程序中解压缩iOS
EN

Stack Overflow用户
提问于 2013-09-10 12:01:01
回答 3查看 795关注 0票数 0

我正在开发一个iOS应用程序,它需要不时下载大约50 MB的数据。bzip2给了我最好的压缩速率(将大小缩小到8MB)。

问题是:如何解压缩应用程序中的数据?

我做了一些研究--我发现的唯一两件事是Keka (但完整的源代码不是公开的)和C++源代码的bzip2命令行工具,这对我来说太长了,太复杂了,在给我的应用程序上做了必要的调整。

我正在寻找类似http://commons.apache.org/proper/commons-compress/的东西,这是安卓版本的应用程序。

如果您知道如何使用7zip而不是bzip2来实现它,那就可以了--它只是有点不那么有效。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-10 12:25:18

只要您有一个足够好的编译器,bzip2源代码就会构建到您可以链接到的代码中的libbzip2 (我相信iOS就是这样--尽管我没有尝试.)

您需要编写的代码如下所示:

代码语言:javascript
复制
int error;
const int MAXSIZE = 4096;    // Or some other decent size.
char buffer[MAXSIZE];
FILE *f = fopen("somefile.bz2", "rb"); 
BZFILE* b = BZ2_bzReadOpen(&error, f, 0, 0, NULL, 0);
do {
   BZ2_bzRead(&error, b, buffer, MAXSIZE);
} while(error != BZ_OK);
BZ2_bzReadClose(&error, b);

您可能需要添加一些检查“错误”的内容,但我认为这个概念应该有效--我只是根据文档输入了所有的代码,以及我在过去使用这个包和类似包时的经验。

票数 1
EN

Stack Overflow用户

发布于 2013-09-10 12:24:27

我建议您静态地链接到libbz2。在谷歌找到资料来源。

票数 0
EN

Stack Overflow用户

发布于 2022-06-23 05:33:16

Mats Petersson的答案指向正确的方向,但并不完整。

这一守则正在实践中:

代码语言:javascript
复制
#import "bzlib.h"

FILE * f = fopen (sourceURL.path.UTF8String, "rb");

int error;
const int MAXSIZE = 4096;
char processedBuffer [MAXSIZE];
char unprocessedBuffer [MAXSIZE];
int unprocessedCount = 0;

do
{
    BZFILE * b = BZ2_bzReadOpen (& error, f, 0, 0, unprocessedBuffer, unprocessedCount);
    while (error == BZ_OK)
    {
        int processedCount = BZ2_bzRead (& error, b, processedBuffer, MAXSIZE);
        
        // here you do what you need with uncompressed data
        for (int i = 0; i < processedCount; i ++)
            printf ("%c", processedBuffer [i]);
    }
    
    void * tmpBuf;
    BZ2_bzReadGetUnused (& error, b, & tmpBuf, & unprocessedCount);
    for (int i = 0; i < unprocessedCount; i ++)
        unprocessedBuffer [i] = ((char *) tmpBuf) [i];
    
    BZ2_bzReadClose (& error, b);
}
while (unprocessedCount > 0 || feof (f) == NO);

fclose (f);

由于我将bzip2作为源代码,需要将这些文件添加到项目中:

代码语言:javascript
复制
blocksort.c
bzlib_private.h
compress.c
crctable.c
decompress.c
huffman.c
randtable.c
bzlib.h
bzlib.c
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18718433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档