我正在编写一个工具,其中包括我的学士论文的反序列化机制,我使用Get
Monad(Data.Binary.Get
)。我遇到了以下问题:
在反序列化过程中,有一部分我有一个Get a
类型的getter,我需要阅读长度为ByteString
的{{1}},其中n
是金额如果我在此位置运行n
,将消耗的字节数。换句话说,我需要知道我的getter
将消耗多少字节而不消耗它们。
有一种方法可以做到这一点:
getter
但这超出了描述的范围。每次调用此方法时,它都会复制文件的整个剩余部分。
尽管理论上这似乎不是一个难题,但到目前为止,Get Monad已经能够完成我所需的一切,但我找不到更好的解决方案。
答案 0 :(得分:1)
我需要知道我的getter将消耗多少字节 消耗它们。
在解析bytesRead :: Get Int64
值之后,也许您可以对lookAhead
函数执行两次调用,即a
内的第二次调用。像
bytesRead1 <- bytesRead
bytesRead2 <- lookAhead (getter *> bytesRead)
return (bytesRead2 - bytesRead1)
然而,我不确定bytesRead
在lookAhead
内的行为方式。