ソケットを介してデータを転送するには、以下の「sendData」メソッドを使用します。データ量がかなり大きくなる可能性があるため (~ 250000 - 500000 バイト)、GZipOutputStream を使用して protobuf メッセージを圧縮したいと考えています。私が直面している問題は、圧縮されたメッセージのサイズを取得して先頭に追加できないことです。
CodedOutputStream と組み合わせて GZipOutputStream を使用するにはどうすればよいですか?
void CommIF::sendData(FVMsg message, vector<int> clients)
{
google::protobuf::uint32 message_length = message.ByteSize();
int prefix_length = sizeof(message_length);
int buffer_length = prefix_length + message_length;
google::protobuf::uint8 buffer[buffer_length];
google::protobuf::io::ArrayOutputStream array_output(buffer, buffer_length);
google::protobuf::io::CodedOutputStream coded_output(&array_output);
coded_output.WriteLittleEndian32(message_length);
message.SerializeToCodedStream(&coded_output);
for (vector<int>::iterator it = clients.begin(); it!=clients.end(); ++it) {
int client = *it;
int sent_bytes = write(client, buffer, buffer_length);
if (sent_bytes != buffer_length) {
ERROR_LOG("problems sending . Only sent " << sent_bytes << " bytes");
}
else
{
DBG_LOG("Successfully sent " << sent_bytes << " bytes");
}
}
}