【问题标题】:Append to golang gob in a file on disk在磁盘上的文件中附加到 golang gob
【发布时间】:2015-06-19 00:18:57
【问题描述】:

我正在尝试将gob 编码的数据作为简单数据存储保存在磁盘上的文件中。但是,当我下次打开它时,gob 编码器会忽略文件中已有的任何数据,并在发送数据之前重新开始发送已发送格式的定义。看到gob.Encoder 需要io.Writer,而不是io.ReadWriter,这是有道理的。编码器不知道文件中的内容,因为它无法从中读取。

然而,这是非常低效的。它也不必要地难以解析,因为每次编码器在写入文件时重新启动时,您都必须重置解码器,因为 gob 类型 id 可能已经改变。

如何继续写入包含 gob 数据的文件的末尾?我是否必须创建一个新文件,移动所有数据,以便 gob 编码器知道它已经发送了哪些类型,或者我有没有办法告诉编码器它已经知道哪些类型,或者其他方式?我需要它在软件重新启动时工作。

【问题讨论】:

    标签: go gob


    【解决方案1】:

    在写入 gob 值流时,无法重建具有其他编码器所具有的状态的编码器。如果您在附加值时不能使用原始编码器,那么您有两个选择:

    • 按照您的建议移动数据。
    • 使用成帧机制将多个 gob 流存储到单个文件中。例如,您可以在每个 gob 流前面加上该流的长度。

    【讨论】:

    • 为什么不可能?是编码时使用的部分数据在重启时丢失了,还是只是缺少api函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2017-01-15
    相关资源
    最近更新 更多