在磁盘上的文件中附加golang gob

时间:2015-06-19 00:18:58

标签: go gob

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

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

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

1 个答案:

答案 0 :(得分:3)

在编写gob值流时,无法使用其他编码器具有的状态重建编码器。如果在追加值时无法使用原始编码器,那么您有几个选项:

  • 按照建议移动数据。
  • 使用框架机制将多个gob流存储到单个文件中。例如,您可以为每个gob流添加该流的长度作为前缀。