Haskell Bytestring打包/解压缩

时间:2011-08-17 01:44:50

标签: haskell bytestring

我仍然不知道字节串是如何工作的

import qualified Data.ByteString.Lazy as BS
let x = BS.readFile "somefile.txt" --some large file
let z = ((reverse (BS.unpack x)) !! 2) --do stuff here

我知道bytestrings可用于非常快速有效地读取大量数据。但打开包装是没有意义的。

let z = readArray x 1 --can you read the bytestring like its a array?(something like this)

难道你不能在没有解压缩的情况下以字节串形式读取数据吗?或者只是解压缩一段数据?

你能解释一下它是如何工作的吗?(代码示例)

1 个答案:

答案 0 :(得分:8)

  

但打包拆包并没有意义。

嗯,这肯定是浪费。

  

难道你不能在没有解压缩的情况下以字节串形式读取数据吗?

  • 您的意思是对数据进行操作而不将其转换为其他形式吗?你当然可以。具体取决于你想做什么。我已经使用FFI(以及后来的Data.Vector.Storable)将ByteString作为一组Word32来访问。您可以自然地提取任何个人Word8。我确定你已经看过ByteString的Haddock文档了,但是知道其他软件包直接使用字节串(例如:用于通过FFI调用C代码来传递图像缓冲区)。

  • 您的意思是“在不使用[Word8][Char]”的情况下对数据进行操作吗?二进制,谷物和其他包可用于将字节串解析为任意类型。

  

或只是解压缩一段数据?

不确定

import Data.ByteString as B

getPortion n m = B.unpack . B.take n . B.drop m