我目前正在评估scodec是否适合我的任务。我必须解析一个结构如下的InputStream(文件或网络):
| Header - FieldDesc1 - FieldDesc2 - ... \
- FieldDescM - Record1 - Record2 - ... - RecordN |
这意味着流以一些元数据开始,这些元数据描述了后面的内容。每个元素由分隔符(-
)分隔,分隔符标识它的类型。 N字段描述包含N条记录中每条记录的结构和大小的信息。
我能够解析标题以及字段序列,因为我能够编写一个在编译时已知的编解码器。但是由于来自字段描述的信息,我有点困惑如何在运行时构建编解码器。
这可能吗?如果是的话,或许你可以给我一个例子吗?
答案 0 :(得分:1)
如果它仍然相关,这是一个起点:
consume()
解码类型标识符(我猜这是一个简单的数字),并将类型传递给函数,返回正确的有用编解码器。例如,使用consume()
,您可以确定在解码时使用的编解码器:
def variableTypeC =
int8.consume(tid => selectCodec(tid))(selectTypeId(_))
我不得不处理类似的问题,并采用consume()
解决方案(因为我感觉它为我提供了更多的灵活性,当时只发现scodec
。< / p>
如果有需要,我很乐意使用DiscriminatorCodec构建一个示例:)。