TsFile 主要通过三种方式增加能力:分配新的类型或编解码器编号、增加 Footer 属性,或者 定义新的文件布局。选择哪种方式,取决于读取器在不理解新能力时,是否仍能找到下一个 结构的边界。
Footer 属性容易确定边界:每个属性由 VarString 键和可空的 VarBinary 值组成, 读取器无需解释值的内容,就能保留未知属性。Chunk 也有明确的字节长度,扫描器即使不支持 其中的编解码器,仍可以跳过。数据区标记没有统一的长度字段,遇到未知标记时就不能套用 同样的做法。
兼容的扩展应保留已有字段的含义和边界:
如果直接在 Header 中增加字节,却没有规则选择新布局,旧读取器预期的后续字段位置就会 改变。这类修改需要新的版本号,或明确的扩展机制。
Page AEAD 使用了后一种方式:0x06 文件加密头决定额外的 Chunk Header 字段和 profile 指定的 Page 帧格式,文件版本字节仍为 0x04。旧 v4 读取器可能拒绝这些文件。 加密说明了其布局和能力要求;仅支持基础格式版本还不够。
一个属性可以被跳过,不代表它的含义总能被忽略。描述性属性可以是可选的;如果属性会 改变 Page 字节的解码方式,就需要明确规定读取器应如何支持。读取器无法执行必要的加密 处理或其他解释规则时,应报告错误,不能按默认方式继续解码。