我正在将包从使用GHC.IO.Handle进行网络转换为Network.Connection.Connection。痛点之一是Data.ByteString.Lazy.ByteString更改为Data.ByteString.Char8.ByteString 的位置数量。
一个示例函数是:
import qualified Data.ByteString.Lazy as BL
-- gets the size of the frame
-- the bytestring should be at least 7 bytes long, otherwise this method will fail
peekFrameSize :: BL.ByteString -> PayloadSize
peekFrameSize = runGet f
where
f = do
void $ getWord8 -- 1 byte
void $ (get :: Get ChannelID) -- 2 bytes
get :: Get PayloadSize -- 4 bytes
Run Code Online (Sandbox Code Playgroud)
如何将Data.ByteString.Char8.ByteString转换为Data.ByteString.Lazy.ByteString以在Data.Binary.Get中使用?
首先,Data.ByteString.Char8是一个模块,而不是一个类型。与 相同Data.ByteString.Lazy。也就是说,假设显而易见,那么请注意,这Data.ByteString.Char8.ByteString实际上是Data.ByteString.ByteString. 所以你所需要的就是fromStrictMikail Glushenkov 提到的函数。
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |