问题标签 [bytestring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2406 浏览

io - 在haskell中读取大文件?

我一直试图在haskell中读取一个大文件。

我需要为大学项目使用自定义算法对其进行压缩。一切正常,直到我开始压缩大文件。

我从我的程序中提取出了问题所在,并以“Hello big file”的形式在这里公开它:

我将此文件命名为 Test.hs,然后执行以下操作:

谁能解释一下为什么我需要 500 兆字节的 RAM 和 30 秒的 CPU 才能浏览一个可怜的 5 兆字节文件?请问我在做什么错?为什么 [word8] 没有像 ByteString 文档所述那样缓冲。以及如何解决这个问题?

我试图定义自己的尾递归折叠而不是 foldl、foldr 或 foldl'。我也尝试使用 seq 解冻 thunk。到目前为止我没有得到任何结果。

感谢您提供任何帮助,因为我被卡住了。

0 投票
2 回答
2021 浏览

io - 对haskell中的大文件进行IO:性能问题

我正在尝试使用 Haskell 处理大文件。我想逐字节浏览输入文件,并逐字节生成输出。当然,我需要用合理大小(几 KB)的块来缓冲 IO。我做不到,我需要你的帮助。

我将此文件命名为TestCopy.hs,然后执行以下操作:

我的问题: 5MB 和 10 MB 文件之间存在巨大差异。我希望性能与输入文件的大小成线性关系。请问我做错了什么,我该如何做到这一点?我不介意使用惰性字节串或其他任何东西,只要它有效,但它必须是标准的 ghc 库。

Precision:这是一个大学项目。而且我不是要复制文件。该doSomeStuff功能应执行我必须自定义的压缩/解压缩操作。

0 投票
1 回答
321 浏览

git - 从 Haskell 中的 git packfile 索引中获取幻数

我想从 git packfile 索引中获取幻数,以确保它确实是一个包文件。包格式文档指出幻数是“/377tOc”。例如,当我用 Ruby 打开包文件时,我会在读取文件时得到它:

但是在 Haskell 中,我得到了这个:

我认为我遗漏了一些明显的东西,但我不清楚那是什么。我在这里做错了什么?

0 投票
2 回答
280 浏览

arrays - 数据类型为 ByteString

我有一个newtype我想保存在一个文件中,如下所示:

所以基本上是一个Array. 但也许有一天我想像这样添加一些其他数据:

等等。我只是想知道,是否有任何方便、优化的功能可以做到这一点,ArrayByteString结合数据——反之亦然。或者我自己怎么写,如果没有的话。

0 投票
2 回答
1496 浏览

haskell - 什么时候使用 ByteString,什么时候不使用?

我在 SPOJ 上的 PRIME1 问题上的尝试相当糟糕。我发现使用 ByteString确实有助于提高阅读问题文本的性能。但是,使用 ByteString 写出结果实际上比使用 Prelude 函数要慢一些。我试图弄清楚我是否做错了,或者这是预期的。

我使用 (putStrLn.show) 和 ByteString 等效项进行了三种不同的分析和计时:

  1. 我测试每个候选人,看它是否是素数。如果是这样,我将其添加到列表中并使用 (putStrLn . show) 将其写出来
  2. 我列出所有素数并使用 (putStrLn . unlines. show) 写出列表
  3. 我列出所有素数并使用 map (putStrLn.show) 写出列表

当您在一个函数中构建列表并在另一个函数中使用它时,我预计数字 2 和 3 的执行速度会变慢。通过在生成数字时打印它们,我避免为列表分配任何内存。另一方面,您在每次调用 putStrLn 时都会进行调用系统调用。对?所以我进行了测试,#1 实际上是最快的。

使用选项 #1 和 Prelude ([Char]) 功能实现了最佳性能。我希望我的最佳表现是使用 ByteString 的选项 #1,但事实并非如此。我只使用了惰性字节字符串,但我认为这无关紧要。会吗?

一些问题:

  • 您是否希望 ByteStrings 在将一堆整数写入标准输出时表现更好?
  • 我是否错过了一种生成和写出会导致更好性能的答案的方式模式?
  • 如果我只是将数字写成文本,那么使用 ByteString 是否有好处?

我的工作假设是,如果您没有将它们与其他文本结合起来,那么用 ByteString 写出 Integer 会更慢。如果您将整数与 [Char] 结合使用,那么使用 ByteStrings 会获得更好的性能。即,ByteString 重写:

会比上面写的版本快很多。这是真的?

谢谢阅读!

0 投票
1 回答
746 浏览

haskell - 如何从 haskell 字节串中读取 24 位 int?

我正在尝试使用 Haskell 解析二进制格式(PES):

我需要读取 pecstart 以获取其他数据的偏移量(宽度、高度和针迹)但这对我不起作用,因为我需要读取 24 位值,而 ByteString 包似乎没有 24位版本。

我应该使用不同的方法吗?Data.Binary 包似乎适用于简单格式,但我不确定它如何用于这样的事情,因为您必须读取一个值才能找到文件中其他数据的偏移量。我错过了什么?

0 投票
1 回答
363 浏览

haskell - Data.ByteString 中的 findSubstrings 和 breakSubstring

在它的来源中Data/ByteString.hs说,该功能findSubstrings已被弃用,取而代之的是breakSubstring. 但是我认为findSubstrings使用 KMP 算法实现的算法比使用的算法更有效breakSubstring。有人知道为什么会这样做吗?

这是旧的实现:

这是新的天真的:

0 投票
1 回答
233 浏览

haskell - 如何使用 Data.Binary 存储递归数据类型

Data.Binary是很棒的。我只有一个问题。假设我有这样的数据类型:

很容易看出这是一个递归数据类型,因为 Haskell 是惰性的。由于 Haskell 作为一种语言既不使用引用也不使用指针,而是按原样呈现数据,我不确定如何保存。我有强烈的迹象表明,这种幼稚的指责将导致无限的字节串......

那么如何才能安全地保存这种类型呢?

0 投票
1 回答
936 浏览

haskell - Haskell iteratee:去除尾随空格的简单示例

我试图了解如何将 iteratee 库与 Haskell 一起使用。到目前为止,我所看到的所有文章似乎都专注于建立一种关于如何构建迭代器的直觉,这很有帮助,但现在我想深入了解并实际使用它们,我觉得有点不知所措。查看 iteratees 的源代码对我来说价值有限。

假设我有这个函数可以从一行中修剪尾随空格:

我想做的是:将它变成一个迭代器,读取一个文件并将其写在其他地方,并从每行中去除尾随空格。我将如何使用迭代器构建它?我看到enumLinesBSData.Iteratee.Char 中有一个函数,我可以深入了解它,但我不知道是否应该使用mapChunksconvStream如何将上面的函数重新打包成一个 iteratee。

0 投票
2 回答
3310 浏览

haskell - Haskell Lazy ByteString + 读/写进度函数

我正在学习 Haskell Lazy IO。

我正在寻找一种优雅的方式来复制大文件(8Gb),同时将复制进度打印到控制台。

考虑以下以静默方式复制文件的简单程序。

想象有一个回调函数要用于报告:

问题:如何将 onReadBytes 函数编织到 Lazy ByteString 中,以便在成功读取时回调它?或者如果这个设计不好,那么 Haskell 的方法是什么?

注意:回调的频率并不重要,可以每 1024 字节或每 1 Mb 调用一次——不重要

回答:非常感谢 camccann 的回答。我建议完全阅读它。

Bellow 是我基于 camccann 代码的代码版本,您可能会发现它很有用。