请教裸奔arm解压ZIP方案。
本帖最后由 yanghuanchun 于 2018-8-24 11:32 编辑如题,最近公司项目需要增加解压缩ZIP的功能,而且要实现能从压缩包里面解压单个文件的功能。目前的硬件是ASM9X35,ARM9内核。软件环境是裸奔加 C++。需要在上面增加解压ZIP压缩文件的功能。昨天找了一些资料整理了一个初步方案:
1、使用zlib作为解压缩算法。
2、修改mini ZIP 将它的文件系统替换为FATFS文件系统。
有没有做过的坛友,我这个方案可行性怎么样,迫切渴望坛友指点。。或者哪位前辈做过这种功能,能指导一下方向,非常感谢。也汇总一下我之前找到的资料,如下:
1、zlib的网站 :https://zlib.net/
2、miniZIP 的例子 http://www.winimage.com/zLibDll/minizip.html
3、一个牛人使用mini zip的开发经验 https://www.cnblogs.com/menlsh/p/4480577.html
4、、坛友开源的LZO算法基于STM32https://www.amobbs.com/forum.php?mod=viewthread&tid=5619913&highlight=lzo 裸奔玩的嗨 上linux吧。、 zlib使用比较简单,记得自带有解压zip文件参考代码 starli 发表于 2018-8-24 12:57
上linux吧。、
不行的,产品软件架构改不了了 eleqian 发表于 2018-8-24 13:13
zlib使用比较简单,记得自带有解压zip文件参考代码
你说的是mini zip吗? mini lzo我已经在407上面跑起来了。只给了8KB的内存,就可以正常压缩,解压缩。速度还挺快的。压缩比例大概1/9。我是用0-255这样2KB的数据进行测试的。 honami520 发表于 2018-8-24 14:30
mini lzo我已经在407上面跑起来了。只给了8KB的内存,就可以正常压缩,解压缩。速度还挺快的。压缩比例大概 ...
这个能解压ZIP文件吗,电脑打包的ZIP文件包,并且从文件包里面解压出单个的文件。 yanghuanchun 发表于 2018-8-24 13:35
你说的是mini zip吗?
下了个zlib看确实自带minizip代码,网站上还另外给了个链接解压zip,不到2k代码:
https://github.com/madler/sunzip 这个功能已经完成了。使用的方案就是我楼主位的方法。首先将zlib和minizip的源代码添加到工程。然后将minizip部分的和文件系统相关的部分做修改,也就是ioapi.c,将里面文件系统接口替换为fatfs的函数就可以使用了。使用这个网友开源的方法是可以的 https://www.cnblogs.com/menlsh/p/4480577.html。 可以说明 详细一点吗? 应该会有比较多人需要
yanghuanchun 发表于 2018-9-16 11:18
这个功能已经完成了。使用的方案就是我楼主位的方法。首先将zlib和minizip的源代码添加到工程。然后将miniz ...
谢谢你给了思路。 liang16888 发表于 2018-9-21 13:23
可以说明 详细一点吗? 应该会有比较多人需要
我在十楼说的挺清楚了,你还有哪方面不明白,我可以再说说,代码是没有了,公司电脑不能上网。。。 yanghuanchun 发表于 2018-9-23 21:16
我在十楼说的挺清楚了,你还有哪方面不明白,我可以再说说,代码是没有了,公司电脑不能上网。。。 ...
我不明白是
解压ZIP是解在 RAM 中?
裸奔情况下如何创造这个空间?
详细步骤 如果不能提供代码 说明一下还有那些动作要做才能
有这个空间使用 liang16888 发表于 2018-9-27 15:53
我不明白是
解压ZIP是解在 RAM 中?
裸奔情况下如何创造这个空间?
首先不是写在ram里面,裸奔也可以上文件系统,我们用的fatfs。然后你把我帖子写的步骤和一些资料链接看一下,应该没问题的。 yanghuanchun 发表于 2018-9-27 19:12
首先不是写在ram里面,裸奔也可以上文件系统,我们用的fatfs。然后你把我帖子写的步骤和一些资料链接看一 ...
你好,这个zlib压缩、解压缩,最小支持多大的内存操作呢?
我之前用的mini lzo,但是这个玩意解压缩只能在linux下才有工具,一般的没有工具可以解压缩!所以希望找个能直接windows解压缩的来验证 honami520 发表于 2018-9-27 19:53
你好,这个zlib压缩、解压缩,最小支持多大的内存操作呢?
我之前用的mini lzo,但是这个玩意解压缩只能 ...
抱歉,刚看到消息,我们使用的内存也不是很大,外接的好像是256Mbit的SDRAM。这个是可以解压windos上面的zip工具打包的文件夹的。我用的打包工具是rar和360的压缩软件。 yanghuanchun 发表于 2018-10-11 11:17
抱歉,刚看到消息,我们使用的内存也不是很大,外接的好像是256Mbit的SDRAM。这个是可以解压windos上面的 ...
都上M了兄弟,有没有能在KB级别上使用,事实上我看这位兄弟用的只是2KB的用例 myxiaonia 发表于 2018-10-11 11:34
都上M了兄弟,有没有能在KB级别上使用,事实上我看这位兄弟用的只是2KB的用例 ...
看来是只用片内的内存弄呢 honami520 发表于 2018-8-24 14:30
mini lzo我已经在407上面跑起来了。只给了8KB的内存,就可以正常压缩,解压缩。速度还挺快的。压缩比例大概 ...
请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段? syj0925 发表于 2018-10-11 22:37
请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段? ...
这玩意是这样,你压缩一段内容,然后会得到压缩之后的数据长度,以及内容。
解压缩的时候,需要根据指定解压缩的长度。
所以要解压缩就很麻烦了。需要知道每一段压缩后的输出长度保存起来。 syj0925 发表于 2018-10-11 22:37
请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段? ...
lz系列的压缩法,全部都不能中途解压,至少得全部解压到内存中,提取出你要的那个片段
原因好像是因为它用到已经压缩部分的片段作为元素,这些元素可以直接用于之后的片段的压缩单元
解压时必须要回溯之前的片段,因此不可能达到你的要求,不过rle编码是可以的 syj0925 发表于 2018-10-11 22:37
请教一下,压缩/解压不用把整个文件读取到内存吗?还是可以读取一小段,然后解压一小段? ...
21楼回复的很详细,可以参考一下 yanghuanchun 发表于 2018-10-11 11:17
抱歉,刚看到消息,我们使用的内存也不是很大,外接的好像是256Mbit的SDRAM。这个是可以解压windos上面的 ...
楼主大神,请问你这个方案确定能解压WINDOWS生成的压缩文件吗?例如WINRAR软件生成的压缩包.谢谢. advarx21ic 发表于 2019-3-13 22:43
楼主大神,请问你这个方案确定能解压WINDOWS生成的压缩文件吗?例如WINRAR软件生成的压缩包.谢谢. ...
可以解压电脑打包的ZIP的。大神不敢当啊,都是搬来的代码。 yanghuanchun 发表于 2019-3-15 22:40
可以解压电脑打包的ZIP的。大神不敢当啊,都是搬来的代码。
感谢指点
页:
[1]