我仍然不知道字节串是如何工作的
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)
难道你不能在没有解压缩的情况下以字节串形式读取数据吗?或者只是解压缩一段数据?
你能解释一下它是如何工作的吗?(代码示例)
答案 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