【发布时间】:2014-05-30 05:39:56
【问题描述】:
我想从网络套接字读取特定大小的消息。大小在消息本身之前进行编码。大小+消息用GzipOutputStream压缩。
这是我的解码器的简化示例代码:
unsigned size;
GzipInputStream gzip_stream(&file_input_stream_, GzipInputStream::ZLIB);
{
CodedInputStream coded_stream(&gzip_stream);
coded_stream.ReadVarint32(&size);
}
message->ParseFromBoundedZeroCopyStream(&gzip_stream, size);
MessageLite::ParseFromBoundedZeroCopyStream() 的文档中有相反的说法:
- 从给定的零拷贝输入流中读取协议缓冲区,预计消息的长度正好为“size”字节。
- 如果成功,将从输入中消耗这么多字节。
所以,我很困惑——这个函数会从流中读取size 字节,还是会期待size 字节的消息? - 我建议前者,因为我无法从同一个套接字正确读取两条消息。
问题:
如何正确读取来自GzipInputStream的特定大小(SerializeAsString().size())的消息?
【问题讨论】:
标签: c++ gzip protocol-buffers