【发布时间】:2020-04-29 23:14:40
【问题描述】:
我正在使用有线协议,它礼貌地将消息的总长度(以字节为单位)编码为消息前 4 个字节中的 Int32le。这似乎是一个非常常见的用例,但我在Data.Binary 中没有看到明显的功能。有没有标准的方法来处理编码成这样的格式?
还有,当我有你的时候,有没有一种标准的方法可以用Network.Socket 读取这样的协议?我想我读取了前 4 个字节,然后将它们解码,然后使用该数字读取消息的其余部分。
关于上下文,这里是the BSON spec。我们正在尝试将压缩向量写入the current BSON library 不支持的自定义二进制字段(binary 元素中的 0x80-0xFF),因此我们需要做一些我们自己的编码。
【问题讨论】:
-
你的意思是
Int32le,而不是Word32le? -
上帝是我的见证,它是 Int32le。为了确定,我重读了几次规范。 bsonspec.org/spec.html
-
嗯,你是对的。不过,在规范中使用带符号的值来表示这样的长度似乎是一个可怕的缺陷。
-
如果这特别是关于 BSON,而不是一般如何做这类事情,那么为什么不直接使用
bson包呢? (也可能是bson-mapping)
标签: sockets haskell binary-data