为什么decodeFile会抛出"没有足够的字节"错误?

时间:2014-09-29 02:57:32

标签: haskell bytestring

为什么来自decodeFile的{​​{1}}在使用Data.Binary*** Exception: demandInput: not enough bytes decode按预期工作时会抛出错误readFile

最小的例子

Data.ByteString.Lazy

我发现了这个可能相关的问题:Using Data.Binary.decodeFile, encountered error "demandInput: not enough bytes"但它并没有真正回答我的问题,这就是为什么使用module Testing where import Data.Binary import qualified Data.Map.Strict as Map import qualified Data.ByteString.Lazy as B x :: Map.Map Char Int x = Map.fromList $ zip ['a'..'d'] [1,2,3,4] main :: IO (Map.Map Char Int) main = do encodeFile "testing" (encode x) r <- decodeFile "testing" print $ r == x return r main2 :: IO (Map.Map Char Int) main2 = do B.writeFile "testing2" (encode x) r <- fmap decode $ B.readFile "testing2" print $ r == x return r 无效但decodeFile无效。

我得到的输出:

readFile

1 个答案:

答案 0 :(得分:4)

你有

encodeFile "testing" (encode x)

表示您将x 编码两次。将其更改为

encodeFile "testing" x

按预期工作。