相关疑难解决方法(0)

懒惰I/O有什么坏处?

我一般都听说生产代码应该避免使用Lazy I/O. 我的问题是,为什么?是否可以在懒散的I/O之外使用它?什么使替代品(例如调查员)更好?

io haskell lazy-evaluation

86
推荐指数
5
解决办法
9868
查看次数

确保文件立即关闭

我正在编写一个守护进程,它从一个小文件中读取内容,修改它,然后将其写回同一个文件.在尝试写入之前,我需要确保每个文件在阅读后立即关闭.我还需要确保每个文件在写完后立即关闭,因为我可能偶尔会立即再次阅读它.

我已经研究过使用二进制严格而不是二进制,但似乎只提供严格的Get,而不是严格的Put.与System.IO.Strict相同的问题.从阅读二进制严格的文档,我不确定它真的解决了我确保文件被迅速关闭的问题.处理这个问题的最佳方法是什么?DeepSeq?

这是一个高度简化的示例,可以让您了解我的应用程序的结构.此示例以.结尾

*** Exception: test.dat: openBinaryFile: resource busy (file is locked)

原因很明显.

import Data.Binary ( Binary, encode, decode )
import Data.ByteString.Lazy as B ( readFile, writeFile )
import Codec.Compression.GZip ( compress, decompress )

encodeAndCompressFile :: Binary a => FilePath -> a -> IO ()
encodeAndCompressFile f = B.writeFile f . compress . encode

decodeAndDecompressFile :: Binary a => FilePath -> IO a
decodeAndDecompressFile f = return . decode . decompress =<< B.readFile f

main = do
  let i = …
Run Code Online (Sandbox Code Playgroud)

io haskell file strict

9
推荐指数
2
解决办法
774
查看次数

标签 统计

haskell ×2

io ×2

file ×1

lazy-evaluation ×1

strict ×1