package zstd_test import ( "bytes" "fmt" "github.com/klauspost/compress/zstd" ) func ExampleWithEncoderDictRaw() { // "Raw" dictionaries can be used for compressed delta encoding. source := []byte(` This is the source file. Compression of the target file with the source file as the dictionary will produce a compressed delta encoding of the target file.`) target := []byte(` This is the target file. Decompression of the delta encoding with the source file as the dictionary will produce this file.`) // The dictionary id is arbitrary. We use zero for compatibility // with zstd --patch-from, but applications can use any id // not in the range [32768, 1<<31). const id = 0 bestLevel := zstd.WithEncoderLevel(zstd.SpeedBestCompression) w, _ := zstd.NewWriter(nil, bestLevel, zstd.WithEncoderDictRaw(id, source)) delta := w.EncodeAll(target, nil) r, _ := zstd.NewReader(nil, zstd.WithDecoderDictRaw(id, source)) out, err := r.DecodeAll(delta, nil) if err != nil || !bytes.Equal(out, target) { panic("decoding error") } // Ordinary compression, for reference. w, _ = zstd.NewWriter(nil, bestLevel) compressed := w.EncodeAll(target, nil) // Check that the delta is at most half as big as the compressed file. fmt.Println(len(delta) < len(compressed)/2) // Output: // true }