1

ソケットを介してデータを転送するには、以下の「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");
    }
  }
}
4

0 に答える 0