構造をディスクに保存し、後で再度読み込む必要があります。IO を最小限に抑えようとしていますが、ファイルの圧縮と解凍に何年も費やさないようにしています。したがって、圧縮には非常に高速な Snappy を使用する予定です。そして比較的効率的です。
通常、ゴブをファイルに保存するときに、次のように gzip 圧縮します。
func (t *Object) Save(filename string) error {
// Open file for writing
fi, err := os.Create(filename)
if err != nil {
return err
}
defer fi.Close()
// Attach gzip writer
fz := gzip.NewWriter(fi)
defer fz.Close()
// Push from the gob encoder
encoder := gob.NewEncoder(fz)
err = encoder.Encode(t.Classifier)
if err != nil {
return err
}
return nil
}
しかし、Snappy は、他のすべてが使用しているように見えるこれらのリーダー/ライター インターフェイスには接続しません。代わりに、基本的な機能を提供するだけです: https://godoc.org/code.google.com/p/snappy-go/snappy
func Encode(dst, src []byte) ([]byte, error)
func Decode(dst, src []byte) ([]byte, error)
このSnappyパッケージを使用して、ゴブデータをファイルに保存するときに圧縮する(そしてそれを読み戻す)最も効率的な方法は何ですか? 理想的には、ioutil.ReadAll を使用して gob リーダーからバイトのスライスを読み取ってから、それをもう一度圧縮することはしたくありません。 .
リーダーとライターのインターフェイスがどのように機能するかを完全には理解していないことを認めます。