作者nobodycares (没人在乎)
看板C_and_CPP
标题Re: [问题] C++ unzip library
时间Thu Sep 6 00:11:16 2018
1F:→ largesperm: 现在还是有一点很不解 为什麽几乎每个压缩解压缩都是09/05 10:05
2F:→ largesperm: 说可以解到 heap or mem 这样我要怎麽存取解压出来的09/05 10:05
3F:→ largesperm: 档案 可能我观念还没有很好 再研究看看09/05 10:05
解压缩跟压缩一定需要运算 运算就得用CPU
资料都是 硬碟 -> 记忆体 -> 快取 -> 暂存器
就算有个包装好的API给你,内部的黑箱子也是这样处理
高阶语言你只要了解记忆体操作就好,至於要怎麽存取解压缩的档案,这会跟压缩格式
有别。一般压缩档都会有类似索引的资讯,告诉你特定档案的偏移量;至於能不能局部
解压缩这要视演算法跟格式而定。
所以一般的流程是:
1. 取得压缩档案的资讯
2. 配置缓冲(Buffer)空间
3. 解压缩直到目标档案的区块都解完
但老实讲解压缩/压缩只是演算法,他的目标不一定是档案,你要搞懂的是
被压
缩的资料是什麽/怎麽解读。剩下的东西完全就是观念问题:
例如你配置的是 4096 bytes 的Buffer,每次解压缩 4096 到记忆体内後,就马上用
file stream写到硬碟档案,整个流程完成後再读回来,这是最简单最阳春的做法。但
是如果你的目的,比方说只是要把目标资料显示或再做处理,比方说raw image,直接在
记忆体作业就好,写到硬碟只是浪费时空间而已。
4F:→ largesperm: 就能用 但是 C++ 平台有很多种 所以大多都是看到09/05 10:30
5F:→ largesperm: 直接给 .h.c.cpp 然後使用者再拿去自己的平台 compile09/05 10:31
6F:→ largesperm: 不然的话 作者就得在每个平台 compile 出 lib09/05 10:31
7F:→ largesperm: 这样想不知道是不是正确的09/05 10:32
你问的问题,很多都在计算机概论里面。
至於.lib要不要重新编译,这种是实务问题,就算同样在Windows平台内,只要你的tool-
chain不同,依赖的.lib就不同。举例来说,光是Visual Studio自家就有差异了,所以这
个差异的要点平台反而是其次,重点是编译器还有执行环境、参数。
C++的规格并没有规范到编译的产物,绝大多数的语言也都没有,所以语言跟平台没有绝
对的关联,就跟Google曾经想推NaCl一样,只要你有心、够狂就好。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.50.60.32
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1536163878.A.52A.html
8F:推 largesperm: 是 感谢解惑 问题实在有点蠢 再努力学习 感谢 09/06 03:43