Stream 在嵌入式设备中用C实现Zip流

Stream 在嵌入式设备中用C实现Zip流,stream,embedded,zip,microcontroller,gzipstream,Stream,Embedded,Zip,Microcontroller,Gzipstream,我必须在MCU的有限内存空间中嵌入一个大的文本文件。此MCU将在以后出于某些目的使用文本文件的内容。 内存限制不允许我在代码中直接嵌入文件内容(假设我使用字符数组存储文件内容),但如果我压缩文件内容(使用轻量级算法,如zip或gzip),则一切都会正常。 假设MCU使用getBytes(i,len)函数读取数组的内容(其中i是所需字节开始的索引&len是要读取的数据长度), 这里的问题是,当我压缩内容并将其存储在设备上(在我的字符数组中)时,我不能再使用getBytes函数来获取目标数据,因此如

我必须在MCU的有限内存空间中嵌入一个大的文本文件。此MCU将在以后出于某些目的使用文本文件的内容。
内存限制不允许我在代码中直接嵌入文件内容(假设我使用字符数组存储文件内容),但如果我压缩文件内容(使用轻量级算法,如zip或gzip),则一切都会正常。
假设MCU使用
getBytes(i,len)
函数读取数组的内容(其中
i
是所需字节开始的索引&
len
是要读取的数据长度), 这里的问题是,当我压缩内容并将其存储在设备上(在我的字符数组中)时,我不能再使用
getBytes
函数来获取目标数据,因此如果我可以在
getBytes
函数的顶部编写一个包装器来将压缩内容映射到请求的内容,那么我的问题就会得到解决。

我对MCU没有处理限制,内存量有限,我知道对zip压缩文件的内容访问是连续的,所以我不知道在这样的环境下,用C或C++可以接受的方式吗? 但是,最好使用分段压缩(以牺牲压缩比为代价),而不是一次压缩/解压缩整个文件,否则需要将整个解压缩文件存储在RAM中

对于小片段,强算法的压缩比与相对较弱的算法的压缩比相差不大。所以我建议使用一种简单的压缩算法


磁盘压缩算法最适合用于压缩/解压缩数据块。

压缩数据是如何到达MCU的?流动?还是本地存储?如果是本地存储,则可能与压缩窗口有多大无关,因为您可以随时返回并重新读取所需的内容(闪存在随机访问时相对较快)。但是如果是流式传输,那么您就不能在ram中保留超过一小部分的内容来访问,因此窗口需要限制在这一范围内。