我正在编写GSM网络内部使用的小协议的技术文档。该协议在连续的字节流中使用模式[id1] + [byte [] data1],[id2] + [byte [] data2]等。
关键是由于各种原因(未来的可扩展性和向后兼容性),不使用某些字段。这些字段的值是谁实现协议的选择(目前默认值来自用于实现协议的语言/框架,即字节数组元素的默认值)。
现在的问题。以某种方式为未使用的字段强加默认值很有用吗?
答案 0 :(得分:0)
如果有的话,优势在于使用字段的协议的未来版本。默认的“坏”值会让接收方确定正在使用旧版本的协议。
答案 1 :(得分:0)
一般来说,我会说“是”。指定了默认值和填充值后,您可以在将来根据现有填充值对协议进行更改。如果您现在无法依赖线路上的字节数,那么将来就没有好办法在这些字节上强制执行结构。更不用说,允许“实现依赖值”泄漏到二进制规范中通常是个坏主意。这就是我在“线上”结构中最终得到8字节填充和英特尔订购的IP地址的方式。
答案 2 :(得分:0)
通常最好指定未使用字段的值,如下所示: - 发件人必须将字段设置为零 - 接收方必须忽略字段
这样,在未来的某个时间点,您可以选择使用该字段来获取某些新功能。执行此操作时,为了向后兼容,您需要做的就是将字段的值0定义为“引入新功能之前的旧行为。”
(实际上,引入某种形式的能力公告也是一个好主意,它允许一方发现另一方是否支持该功能,换句话说,另一方是否能够理解非该字段的值为零。)