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

时间:2016-02-03 15:35:29

标签: scodec

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

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

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

我能够解析标题以及字段序列,因为我能够编写一个在编译时已知的编解码器。但是由于来自字段描述的信息,我有点困惑如何在运行时构建编解码器。

这可能吗?如果是的话,或许你可以给我一个例子吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

我不得不处理类似的问题,并采用consume()解决方案(因为我感觉它为我提供了更多的灵活性,当时只发现scodec。< / p>

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