【问题标题】:Schema of codec is part of the data stream编解码器的模式是数据流的一部分
【发布时间】:2016-02-03 15:35:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: scodec


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2018-11-21
      • 2011-11-17
      • 2022-11-09
      • 1970-01-01
      相关资源
      最近更新 更多