【问题标题】:Proto Buffers not storing data in readable format原型缓冲区不以可读格式存储数据
【发布时间】:2012-12-14 16:20:08
【问题描述】:

我正在将我的 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"
}

【问题讨论】:

  • 如果您想要 JSON,请使用 JSON 序列化程序... Proto Buffers 并不是人类可读的。

标签: c# protocol-buffers


【解决方案1】:

多关注评论

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-07
          • 2020-11-22
          • 2015-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多