1

我正在将我的 protobuf 消息保存到文件中,并且格式一团糟。我之前已经看到它以与 .proto 文件几乎相同的格式将 protobug 消息保存到磁盘。我这样做是这样的:

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

4 回答 4

6

多关注评论

不是网络上使用的二进制格式。

Protobuf 消息并非设计为人类可读的。将它们存储在文本文件中是没有意义的;它们不是文本。

于 2012-12-14T16:25:49.153 回答
1

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

于 2012-12-14T16:49:23.610 回答
1

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

于 2012-12-14T17:07:30.723 回答
0

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

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

于 2021-04-12T10:57:08.170 回答