游戏资源打包问题!压缩、访问!
最近工作需要在做游戏资源打包方面的东西。之前以为做的是像一个rar一样的将目录打包压缩、解压的东西,后来提出需求是在开发时是直接使用stl标准流读取文件,在发布的时候文件访问操作不变,但是资源文件是从打包文件中访问。
刚开始简单进行了设计,将目录打包和解包都做了,但没压缩文件。
数据包大概分为三部分:
|---头部---|---文件索引---|---文件数据---|
1.头部: 主要是记录文件个数索引区长度、文件数据区长度等信息
2.索引: 部分是连接的结构体数组存放的是文件名、长度和文件的偏移位置
3.数据: 文件真实数据,暂时没有压缩加密操作。
使用Boost::iostreas库做了一个文件在上面包上的访问接口,可以直接使用std::istream接口来访问包中的子文件。
大概接口: CPacketStream packetStream("d:/packet.data"); //打开包文件
std::istream* f = packetStream("test.file"); //打开包中的子文件,返回一个istream的只读流
if (f)
{
f->read(); //读操作
f->seekg(); //seek操作都可以
}
现在的问题是,要在包上做压缩操作,一但压缩了seek操作就不是那么简单的了, 但访问接口不变,一时没有找到好方法...
想请问一下在这里的朋友们有没有做过这方面的,指点一下。