Haskell:找出Get表达式消耗的字节数

时间:2016-11-13 10:09:31

标签: haskell deserialization

我正在编写一个工具,其中包括我的学士论文的反序列化机制,我使用Get Monad(Data.Binary.Get)。我遇到了以下问题:

在反序列化过程中,有一部分我有一个Get a类型的getter,我需要阅读长度为ByteString的{​​{1}},其中n是金额如果我在此位置运行n,将消耗的字节数。换句话说,我需要知道我的getter将消耗多少字节而不消耗它们。

有一种方法可以做到这一点:

getter

但这超出了描述的范围。每次调用此方法时,它都会复制文件的整个剩余部分。

尽管理论上这似乎不是一个难题,但到目前为止,Get Monad已经能够完成我所需的一切,但我找不到更好的解决方案。

1 个答案:

答案 0 :(得分:1)

  

我需要知道我的getter将消耗多少字节   消耗它们。

在解析bytesRead :: Get Int64值之后,也许您可​​以对lookAhead函数执行两次调用,即a内的第二次调用。像

这样的东西
bytesRead1 <- bytesRead 
bytesRead2 <- lookAhead (getter *> bytesRead)
return (bytesRead2 - bytesRead1)

然而,我不确定bytesReadlookAhead内的行为方式。