|
|
1
2
你从不使用整数的不定长编码。。。 它写在X.690(08/2015)第8.3章(整数值编码)中:
在这种情况下,规范会说:
CER编码规则(第9章)让您了解撰写本文时大值的含义:
因此,您可以看到,即使是一个巨大的整数,在编码时也总是小于1000字节:因此,您可以选择从不对整数使用不定长形式 |
|
2
0
另外,我不认为BER中存在任何逃逸机制。 不定长编码总是包含使用定长编码编码的数据块(八位字节/位字符串)。用BER的话说,不定长总是以构造形式出现。 对于定长编码,您总是有字节计数来按特定位置切割八位字节流,您不需要任何哨兵。
|
|
|
3
-1
您所关心的场景是:(a)使用图2中所示的替代构造编码,(b)内容八位字节包含八位字节0x0000,它将(错误地)解释为内容结束标记。 当我第一次读到这个问题的时候,我的第一个直觉是,肯定是伯尔说了些什么。可能有一个转义机制来避免内容中的0x0000。可能编码规则是这样的,0x0000自然不会出现。 但在仔细扫描了X.690规范几次之后,我什么也找不到。 因此,我认为您是对的:我认为发送方不应该在这种情况下使用替代构造的编码(这实际上意味着,对于存在这种潜在问题的数据类型,例如整数和位字符串,永远不应该使用替代构造的编码)。 作为比较,Thrift只允许在非常特定的情况下使用STOP标记(字节00)作为编码结构时的“no more fields”标记(参见 https://github.com/erikvanoosten/thrift-missing-specification/blob/master/rpc-spec-binary-protocol.asciidoc |