9

我正在使用惰性字节串读取一个大数据流,并且想知道在解析它时是否至少还有 X 个字节可用。也就是说,我想知道字节串是否至少有 X 个字节长。

调用length它会导致整个流被加载,从而破坏使用惰性字节串的目的吗?

如果是,那么后续将是:如何在不加载整个流的情况下判断它是否至少有 X 个字节?

编辑:最初我在阅读文件的情况下询问,但了解有更好的方法来确定文件大小。但是,我需要的最终解决方案不应依赖于惰性字节串源。

4

4 回答 4

11

是的。

length . take x.

于 2010-03-25T16:09:18.353 回答
1

您是否有理由不使用hFileSize :: Handle -> IO Integer来获取文件的长度?

于 2010-03-25T16:03:55.593 回答
0

它必须迭代整个字符串,但是如果您不在其他任何地方保留对整个惰性字节字符串的引用,我相信它应该能够在字符串的头部向其尾部前进时释放它。

于 2010-03-29T10:48:50.393 回答
0

编辑:对不起。我想我在想字节串是列表。字节串没有 genericLength。

length是严格的,因为它返回的类型Int是严格的。您可以genericLength从 Data.List 使用并导入一个定义惰性 Peano 数字并为您提供 Num 实例的库,例如numbers库:

这会让你以你想要的方式表达你的功能,但 ehemient 的答案在功能上是相同的,并且不需要导入新的库。

我刚刚在这里发表了一篇关于该主题的博客文章,如果这听起来像是您可能感兴趣的一种方法:

http://coder.bsimmons.name/blog/2010/03/lazy-arithmetic-in-haskell/

于 2010-03-25T17:35:55.113 回答