编解码器的模式是数据流的一部分

Schema of codec is part of the data stream

我目前正在评估 scodec 是否适合我的任务。我必须解析结构如下的 InputStream(文件或网络):

| Header -  FieldDesc1 - FieldDesc2 - ...        \
- FieldDescM - Record1 - Record2 - ... - RecordN |

这意味着流以一些元数据开始,这些元数据描述了接下来的内容。每个元素都由一个分隔符 ( - ) 分隔,该分隔符标识它是什么类型。 N 个字段描述包含 N 个记录中每个记录的结构和大小的信息。

我很容易能够解析 header 以及字段的顺序,因为我能够制定一个在编译时已知的编解码器。但是由于字段描述中的信息,我对如何在运行时构建编解码器感到困惑。

这可能吗?如果是,也许你可以给我举个例子?

这里是一个起点,如果它仍然相关的话:

  • 使用 DiscriminatorCodec (and a ),或
  • 在编解码器上使用 consume() 解码类型标识符(我猜这是一个简单的数字),并将类型传递给返回正确所需编解码器的函数。

例如使用consume(),您可以确定解码时使用的编解码器:

def variableTypeC = 
  int8.consume(tid => selectCodec(tid))(selectTypeId(_))

我不得不处理类似的问题并寻求 consume() 解决方案(因为我觉得它为我提供了更多的灵活性并且当时只是发现 scodec) .

如果有任何需要,我很乐意使用 DiscriminatorCodec 构建示例 :)。