[英]Writing into a file in a streaming way and stop when we reach a given memory file size
假設我想將MyItem
的 stream 保存到文件中(例如在 JSON 中)。 當文件達到一定的字節大小限制時,我想停止。 我想在 Haskell 中執行此操作...流式傳輸對我來說不是問題,更重要的是如何在將每個項目放入此文件后獲取文件大小信息...
我不認為開箱即用為此提供任何pipes
,但編寫自己的toHandleBounded
很容易。
在每個步驟中,您檢查文件大小,如果它小於您循環的限制,則將另一個塊寫入文件。
toHandleBounded :: MonadIO m => Integer -> Handle -> Consumer' ByteString m ()
toHandleBounded limit hd = do
current <- liftIO $ hTell hd
when (current < limit) $ do
x <- await
liftIO $ hPut hd x
toHandleBounded limit hd
main :: IO ()
main =
withFile "/dev/urandom" ReadMode $ \hIn ->
withFile "out.txt" WriteMode $ \hOut ->
runEffect $ P.fromHandle hIn >-> toHandleBounded (1024 * 500 ) hOut
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.