Proto Buffers不以可读格式存储数据

时间:2012-12-14 16:20:08

标签: c# protocol-buffers

我将我的protobuf消息保存到文件,格式全部搞砸了。我已经看到它在protobug消息以与.proto文件几乎相同的格式保存到磁盘之前完成。我这样做:

using (Stream output = File.OpenWrite(@"logs\listings.txt"))
{          
    listingBook.AddClisting(_listing);
    listingBook.Build().WriteTo(output);
}

但我得到的是一个错误的文件,似乎用奇怪的标签分隔了ENTER。我希望它保存到磁盘时的样子就像示例:

# Textual representation of a protocol buffer.
# This is *not* the binary format used on the wire.
person {
  name: "John Doe"
  email: "jdoe@example.com"
}

4 个答案:

答案 0 :(得分:6)

更加关注评论

  

这是电线上使用的二进制格式。

Protobuf消息的设计不是人类可读的。将它们存储在文本文件中毫无意义;它们不是文本。

答案 1 :(得分:1)

主要protobuf编码格式是二进制。 是一些实现公开的二级文本格式,但它有点失去了protobuf的许多优点,并且它对它的库支持是不完整的(如果它甚至是正式定义的)。我会说:如果你想要人类可读,请使用XML或json。不是协议缓冲区。

答案 2 :(得分:1)

使用PrintTo而不是WriteTo将数据保持为可读格式。终于找到了。

答案 3 :(得分:0)

由于 protobuf 旨在快速、二进制兼容和优化;存储为人类可读的消息几乎是不可能的。但是有 JSONFormatter Utility

它的主要目的是满足您的要求,但请注意,这可能会使一切变得明显变慢;同时因为转换增加了一些开销。