相关疑难解决方法(0)

Java中是否存在用于协议缓冲区分隔I/O函数的C++等价物?

我正在尝试从C++和Java中的文件读取/写入多个Protocol Buffers消息.谷歌建议在消息之前写长度前缀,但默认情况下没办法(我可以看到).

但是,2.1.0版中的Java API收到了一组"Delimited"I/O函数,显然可以完成这项工作:

parseDelimitedFrom
mergeDelimitedFrom
writeDelimitedTo
Run Code Online (Sandbox Code Playgroud)

有C++等价物吗?如果没有,那么Java API附加的大小前缀是什么,所以我可以用C++解析这些消息?


更新:

这些现在存在于google/protobuf/util/delimited_message_util.hv3.3.0中.

c++ java serialization protocol-buffers

64
推荐指数
7
解决办法
2万
查看次数

在一个协议缓冲区二进制文件中存储多个消息

我有重复的消息,我想存储在一个文件中.目前,我必须在另一条消息中包装此重复消息.有没有解决的办法?

package foo;

message Box {
  required int32 tl_x = 1;
  required int32 tl_y = 2;
  required int32 w = 3;
  required int32 h = 4;
}

message Boxes {
  repeated Box boxes = 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ python protocol-buffers

6
推荐指数
2
解决办法
8762
查看次数

Protobuf、CodedInputStream 解析部分消息

我正在尝试实现与 java 版本兼容的 protobuf 发送/接收,其中首先包含 varint32-prefix。

我几乎让它工作了,但由于某种原因,一些消息变得不完整并且无法通过 assert()。

/receiver.cpp:69: void tcp_connection::handle_read_message(const boost::system::error_code&, size_t): Assertion `line.ParseFromCodedStream(&input)' failed.
Run Code Online (Sandbox Code Playgroud)

semder.pp

boost::asio::streambuf buffer;
std::ostream writer(&buffer);
bool packet_full = false;
uint32_t sent_lines = 0;
{ //new scope for protobuf streams, these flush in dtor
    google::protobuf::io::OstreamOutputStream osostream(&writer);
    google::protobuf::io::CodedOutputStream output(&osostream);
    std::string lines;
    while(std::getline(reader, line)) {
        lines += line + "\n";
        ++sent_lines;
        if(sent_lines > 100) {
            packet_full = true;
            break;
        }
    }
    if(!lines.empty()) {
        msg->set_text(lines);
        const uint32_t size = msg->ByteSize();
        output.WriteVarint32(size);
        uint8_t* buffer = output.GetDirectBufferForNBytesAndAdvance(size);
        if(buffer != 0) …
Run Code Online (Sandbox Code Playgroud)

c++ protocol-buffers boost-asio

3
推荐指数
1
解决办法
5125
查看次数

标签 统计

c++ ×3

protocol-buffers ×3

boost-asio ×1

java ×1

python ×1

serialization ×1