Haskell 使用Data.Binary.decodeFile时,遇到错误“;demandInput:字节不足“;

Haskell 使用Data.Binary.decodeFile时,遇到错误“;demandInput:字节不足“;,haskell,io,binary-data,bytestring,Haskell,Io,Binary Data,Bytestring,我正在尝试使用Data.Binary中的encodeFile和decodeFile函数来保存一个非常大的数据结构,这样我就不必每次运行这个程序时都重新计算它。相关的编码和解码功能如下: writePlan :: IO () writePlan = do (d, _, bs) <- return subjectDomain outHandle <- openFile "outputfile" WriteMode ((ebsP,

我正在尝试使用Data.Binary中的encodeFile和decodeFile函数来保存一个非常大的数据结构,这样我就不必每次运行这个程序时都重新计算它。相关的编码和解码功能如下:

writePlan :: IO ()
writePlan = do (d, _, bs) <- return subjectDomain
               outHandle <- openFile "outputfile" WriteMode
               ((ebsP, aP), cacheData) <- preplanDomain d bs
               putStrLn "Calculated."

               let toWrite = ((map pseudofyOverEBS ebsP, aP),
                              pseudofyOverMap cacheData) :: WrittenData
                 in do encodeFile preplanFilename $ encode toWrite
                    putStrLn "Done."


readPlan :: IO (([EvaluatedBeliefState], [Action]), MVar HeuCache)
readPlan = do (d, _, _) <- return subjectDomain
              inHandle <- openFile "outputfile" ReadMode

              ((ebsP, aP), cacheData) <-  decodeFile preplanFilename :: IO WrittenData

              fancyCache <- newMVar (M.empty, depseudofyOverMap cacheData)
              return $! ((map depseudofyOverEBS ebsP, aP), fancyCache)

我无法理解这一点,谷歌也没有发现关于这条消息的实质性文档或讨论。如有任何见解,将不胜感激

我参加聚会已经很晚了,但在寻找类似问题的帮助时发现了这一点。我正在使用
Data.Binary.Get
的增量接口。如中所示,函数是在
Data.Binary.Get.Internal
中定义的。现在我猜,但是您的decodeFile函数可能会进行某种解析,并且会抛出错误,因为文件没有完全解析(即,解析器认为文件中一定有其他内容,但它已经到达EOF)


希望这能帮助任何人解决这个/类似的问题

在黑暗中刺伤,但它到底有多大?大于4G字节?也许是32位的东西?
Realtime: demandInput: not enough bytes