上下文:我使用.mbtiles文件,一种地理数据文件格式,这是一个包含矢量切片的sqlite数据库文件。
使用协议缓冲区打包那些矢量切片,然后进行gzip压缩。
我正在使用C ++,目前正在阅读zlib用法解压缩示例,但我不确定如何处理块和流事件的结束。
SQLite给了我一个void *指针和一个长度。
我引用页面:
对于zlib流嵌入其他数据的应用程序,这个 例程需要修改以返回未使用的数据,或者 至少表明没有使用多少输入数据,所以 应用程序将知道在zlib流之后的哪个位置。
协议缓冲区类方法采用void *或std :: string。我想我应该选择无效*。
我不确定这些事件是如何工作的,这个例子似乎并没有为字节数组提供一个案例。我应该如何更改代码以避免错误?
答案 0 :(得分:1)
听起来SQLite正在为你提供一个没有任何东西的zlib流。如果是这样,则该评论不适用。
无论如何,您正在关注the right page。 (你没有说出什么"页面"是,但我认识到引用,因为我写了它。)这总体上显示了如何使用zlib函数。您应该能够弄清楚如何将其应用于字节数组而不是文件输入。
如果数据确实是" gzipped",那么您需要使用inflateInit2()
代替inflateInit()
。阅读zlib documentation in zlib.h。