如果您打算使用conduit
s,我强烈建议您先阅读Michael Snoyman 撰写的出色的 Conduit 概述和有关此主题的FP Complete 教程。
我已经打开了我的-vv
旗帜,使其适合 Haskell 初学者(比如我自己)。
你需要三样东西:
- 一个文件源
- 一个 zlib 解压过滤器
- 标准输出接收器
让我们从这个简单的文件复制示例开始:
import Data.Conduit (runResourceT, ($$))
import qualified Data.Conduit.Binary as CB
import Data.Conduit.Zlib
main = do
runResourceT $ CB.sourceFile "input.txt" $$ CB.sinkFile "output.txt"
我们需要在这里修改什么?
- 输入文件名不是
a.txt.gz
- zlib 解压器丢失
- 我们想输出到标准输出,而不是
output.txt
实际上,该decompress
文档包含一个如何解压缩的示例。
请注意,您不能使用decompress
forgzip
生成的文件。decompress
解压缩.Z
旧compress
UNIX 程序生成的文件。
修改上面的例子后我们得到:
import Data.Conduit (runResourceT, ($$), ($=))
import qualified Data.Conduit.Binary as CB
import Data.Conduit.Zlib
import System.IO
main = do
runResourceT $ CB.sourceFile "a.txt.gz" $= ungzip $$ CB.sinkHandle stdout
使用时的差异bzlib-conduit
很小:
import Data.Conduit (runResourceT, ($$), ($=))
import qualified Data.Conduit.Binary as CB
import Data.Conduit.BZlib
import System.IO
main = do
runResourceT $ CB.sourceFile "a.txt.bz2" $= bunzip2 $$ CB.sinkHandle stdout