3

gobエンコードされたデータを単純なデータストアとしてディスク上のファイルに保存しようとしています。ただし、次に開くと、ゴブエンコーダーはファイルに既にあるデータを無視し、データを送信する前に既に送信された形式の定義を送信し始めます。ではなくgob.Encoderがかかるのを見ると、これは理にかなっています。エンコーダーはファイルから読み取ることができないため、ファイルの内容を認識していません。io.Writerio.ReadWriter

ただし、これは非常に非効率的です。また、gob タイプ ID が変更されている可能性があるため、ファイルへの書き込み時にエンコーダーが再起動するたびにデコーダーをリセットする必要があるため、解析が不必要に難しくなります。

gob データを含むファイルの最後まで書き込みを続けるにはどうすればよいですか? 新しいファイルを作成し、すべてのデータを移動して、gob エンコーダーが既に送信した型を認識できるようにする必要がありますか、またはエンコーダーに既に知っておくべき型を伝える方法、または他の方法はありますか? ソフトウェアの再起動後も機能する必要があります。

4

1 に答える 1

3

gob 値のストリームを書き込むときに他のエンコーダーが持っていた状態でエンコーダーを再構築することはできません。値を追加するときに元のエンコーダーを使用できない場合は、いくつかのオプションがあります。

  • 提案どおりにデータを移動します。
  • フレーミング メカニズムを使用して、複数のゴブ ストリームを 1 つのファイルに格納します。たとえば、各ゴブ ストリームにそのストリームの長さをプレフィックスとして付けることができます。
于 2015-06-19T01:15:49.720 に答える