硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5963|回复: 13
收起左侧

[算法] Minilzo解压缩算法能分段压缩与解压吗?

[复制链接]

61

主题

62

回帖

245

积分

高级会员

积分
245
发表于 2020-11-22 23:03:59 | 显示全部楼层 |阅读模式
Minilzo解压缩算法能分段压缩与解压吗?

当一个文件有10MB,MCU内存只有几百KB,能分段解压数据吗?

#define HEAP_ALLOC(var,size) \
    lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]


static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS);
  #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
#define MAX   1024*128

void CDEMODlg::OnOK()
{
        // TODO: Add extra validation here
        unsigned char in[MAX]={0},out[MAX]={0},new_in[MAX]={0},v=0,data[MAX]={0};
        unsigned long in_len=sizeof(in),out_len=0,new_len=0;
        CString s;
        unsigned long t_len=0;

        srand( (unsigned)time( NULL ) );

        for (int j=0; j<sizeof(in); j++)
        {
                if (j%1000==0) v=(unsigned char)(rand()%256);
                data[j]=v;
        }
        memcpy(in,data,sizeof(data));
        in_len=sizeof(data);
        lzo1x_1_compress(in,in_len,out,&out_len,wrkmem);
        lzo1x_decompress(out,out_len/2,new_in,&t_len,NULL); new_len=t_len;
        lzo1x_decompress(&out[out_len/2],out_len/2,&new_in[t_len],&t_len,NULL); new_len+=t_len;

        int x=sizeof(wrkmem);

        for (int i=0; i<sizeof(data); i++)
        {
                if (data[i]!=new_in[i]) break;
        }
        s.Format("OK,原始长度:%d,压缩长度:%d",sizeof(data),out_len);
        if (i>=sizeof(in)) MessageBox(s);
        else MessageBox("Error");

//        CDialog::OnOK();
}


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2020-11-23 00:07:24 | 显示全部楼层
这个完全可以自己将数据分个段即可。
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2020-11-23 16:25:11 | 显示全部楼层
eric2013 发表于 2020-11-23 00:07
这个完全可以自己将数据分个段即可。

那样压缩比例没有完整的文件数据高了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2020-11-24 02:17:40 | 显示全部楼层
vzhaodan 发表于 2020-11-23 16:25
那样压缩比例没有完整的文件数据高了

有道理。
回复

使用道具 举报

5

主题

201

回帖

216

积分

高级会员

积分
216
发表于 2020-11-26 11:45:32 | 显示全部楼层
分段压缩肯定可以,我试验过;可惜服务器那边人家不愿意使用这个办法,最后还是放弃了。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2020-11-26 12:40:52 | 显示全部楼层
不可能的,这种高压缩的算法有个最大的特点,就是按数据片段搜索重复性,已经压缩部分即是压缩文件,也是索引表,作为查找表的一部分,你说能不能分段压缩
回复

使用道具 举报

1

主题

94

回帖

97

积分

初级会员

积分
97
发表于 2020-11-26 14:24:06 | 显示全部楼层
如果重复数据不多的话,这个库压缩率不高,有没有其他高压缩率的无损压缩开源库?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2020-11-27 01:30:57 | 显示全部楼层
hexenzhou 发表于 2020-11-26 14:24
如果重复数据不多的话,这个库压缩率不高,有没有其他高压缩率的无损压缩开源库?

移植7z,就是需要1MB的RAM空间
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
发表于 2021-7-7 13:49:38 | 显示全部楼层
eric2013 发表于 2020-11-27 01:30
移植7z,就是需要1MB的RAM空间

硬汉大大有移植过7z吗,我移植了gzip,zlib都不能解压PC压缩的文件,但是PC能解压stm32压缩的文件,还有就是minilzo能解压PC压缩的文件吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2021-7-7 15:49:42 | 显示全部楼层
烟花易冷~ 发表于 2021-7-7 13:49
硬汉大大有移植过7z吗,我移植了gzip,zlib都不能解压PC压缩的文件,但是PC能解压stm32压缩的文件,还有就 ...

之前一个群友有在H7上移植过7z。

ninilzo可以试试
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
发表于 2021-7-7 15:54:18 | 显示全部楼层
eric2013 发表于 2021-7-7 15:49
之前一个群友有在H7上移植过7z。

ninilzo可以试试

7z的那个帖子我没找到,我移植了quicklz,fastlz都没解压成功,在尝试minilzo时解压出现硬件错误,还没找到原因。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2021-7-8 00:23:26 | 显示全部楼层
烟花易冷~ 发表于 2021-7-7 15:54
7z的那个帖子我没找到,我移植了quicklz,fastlz都没解压成功,在尝试minilzo时解压出现硬件错误,还没找 ...

这个是一个群友测试的,他没有上传例子。
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
发表于 2021-7-8 14:23:13 | 显示全部楼层
eric2013 发表于 2021-7-8 00:23
这个是一个群友测试的,他没有上传例子。

我也在尝试移植7z,不过工作量有点大,移植起来有点困难
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2021-7-9 09:20:18 | 显示全部楼层
烟花易冷~ 发表于 2021-7-8 14:23
我也在尝试移植7z,不过工作量有点大,移植起来有点困难

多试试,是确定可行的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 23:12 , Processed in 0.244664 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表