The protocol overview from Google指出:
协议缓冲区并不总是比XML更好的解决方案–例如,协议缓冲区不是用标记(例如HTML)为基于文本的文档建模的好方法,因为您不能轻易地使结构与文本交错
我不确定我是否理解,有人可以给我一个适当的例子/解释吗?
答案 0 :(得分:1)
想象一下以下HTML:
<p>Hello! <strong>This text is strong (bold).</strong> <em>This is
emphasized (italic).</em> And <a href="https://example.com">here is
a link</a>.</p>
如果您创建了一个合理的Protobuf富文本表示形式,然后以Protobuf文本格式将其写出,则它可能类似于:
{
p: {
children: { text: "Hello! " }
children: {
strong: {
children: { text: "This text is strong (bold)." }
}
}
children: { text: " " }
children: {
em: {
children: { text: "This is emphasized (italic)." }
}
}
children: { text: " And " }
children: {
a: {
href: "https://example.com"
children: { text: "here is a link" }
}
}
children: { text: "." }
}
}
如您所见,Protobuf表示看起来非常复杂。基础文本不再可读,因为结构占主导地位。
现在,就实际的数据结构而言,Protobuf表示形式实际上与HTML / XML解析器所构建的表示形式并没有很大不同。在代码中,使用它可能不再困难。而且Protobuf的二进制序列化可能是合理的。与XML表示相比,您甚至可以节省几个字节(尽管可能不多,因为大部分空间仍将被基础文本占用)。
如果您正在编写一个WYSIWYG富文本编辑器,其中用户从未看到过底层表示,那么使用Protobuf表示上述文本可能很有意义。
您引用的文本(我写的,顺便说一句!)试图说的是,如果您有一个用例,其中有人在用标记编写文本,但是必须在纯文本编辑器中这样做,那么Protobuf不是一个好的解决方案。 HTML或XML可以更好地进行文本标记。
OTOH,如果您可以人工编写纯文本格式的高度结构化数据,那么Protobuf文本格式可能会很好地工作!例如,许多人都以这种方式编写配置文件-很多人为此使用JSON,结果非常相似。同时,对于这些用例,XML变得非常麻烦和繁琐。
综上所述,当人们输入数据时,使用真正的人类优化格式可能是有意义的。对于带有标记的文本,请使用Markdown。对于配置文件等结构化数据,YAML非常好。但是请注意,Markdown和YAML不能作为两台计算机之间的交换格式正常工作。