我建议使用Builder,这是一种填充缓冲区的有效方法,可以直接写入句柄。
#!/usr/bin/env stack -- stack --resolver ghc-8.6.4 script {-# LANGUAGE OverloadedStrings #-} import Data.ByteString.Builder (Builder, hPutBuilder) import Data.Foldable (fold) import System.IO (IOMode (WriteMode), withBinaryFile) pt :: FilePath pt = "data2.csv" cnt :: Int cnt = 400000000 main :: IO () main = writeWithHandle pt dat dat :: Builder dat = "0744442339" writeWithHandle :: FilePath -> Builder -> IO () writeWithHandle path tx = withBinaryFile path WriteMode $ \h -> hPutBuilder h $ makeBuilder cnt tx makeBuilder :: Int -> Builder -> Builder makeBuilder cnt payload = fold $ replicate cnt $ payload <> "\n"
你可以保留 payload 作为一个 Text 如果您愿意,请转换为 Builder 运用 encodeUtf8Builder 。
payload
Text
Builder
encodeUtf8Builder