1

バイト文字列がどのように機能するのかまだわかりません

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

バイト文字列を使用して、大量のデータを非常に迅速かつ効率的に読み取ることができることを知っています。しかし、梱包を解いても意味がありません。

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

アンパックせずにデータをバイト文字列形式で読み取ることはできませんか? それとも、データのセグメントを展開するだけですか?

それがどのように機能するか説明していただけますか?(コード例)

4

1 に答える 1

8

しかし、アンパックをパッキングするのは意味がありません。

うーん、確かに無駄です。

アンパックせずにデータをバイト文字列形式で読み取ることはできませんか?

  • 別の形式に変換せずにデータを操作するということですか? できますよ。正確には、何をしたいかによって異なります。FFI (および後で Data.Vector.Storable) を使用して、ByteString に のセットとしてアクセスしましたWord32。どんな個体もWord8自然に引き出せます。ByteString の Haddock ドキュメントを見たことがあると思いますが、他のパッケージがバイト文字列を直接消費することを知っています (例: FFI 経由で呼び出される C コードで画像バッファーを通信するため)。

  • [Word8]「 orを使用せずにデータを操作する」ということ[Char]ですか? バイナリ、シリアル、およびその他のパッケージを使用して、バイト文字列を任意の型に解析できます。

それとも、データのセグメントを展開するだけですか?

もちろん:

import Data.ByteString as B

getPortion n m = B.unpack . B.take n . B.drop m
于 2011-08-17T02:51:23.397 に答える