1

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

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

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

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

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

4

1 回答 1

1

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

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

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

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

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

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

于 2016-10-21T09:20:45.263 回答