#include <google/protobuf/io/gzip_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
std::string output;
// 压缩序列化
google::protobuf::io::GzipOutputStream::Options options;
options.format = google::protobuf::io::GzipOutputStream::GZIP;
options.compression_level = 9;
google::protobuf::io::StringOutputStream outputStream(&output);
google::protobuf::io::GzipOutputStream gzipStream(&outputStream, options);
person.SerializeToZeroCopyStream(&gzipStream)
gzipStream.Flush(); //数据刷到储存中
printf("COMPRESSION output size : %d\n", static_cast<int>(output.length()));
// 解压缩反序列化
person.Clear();
google::protobuf::io::ArrayInputStream inputStream(output.data(), output.size());
google::protobuf::io::GzipInputStream gzipStream(&inputStream);
person.ParseFromZeroCopyStream(&gzipStream)
http://github.tiankonguse.com/blog/2020/09/18/protobuf-open-gzip.html
本文介绍如何利用Google Protobuf库实现数据的GZIP压缩与解压过程。通过设置压缩选项并使用StringOutputStream和GzipOutputStream实现了序列化的压缩;然后通过ArrayInputStream和GzipInputStream完成了解压缩反序列化的过程。

781

被折叠的 条评论
为什么被折叠?



