-
Works best on text files, database dumps and any other files with lots of repeating patterns and few changes between updates.
-
Generating deltas of compressed files is not recommended because a small change in the source data can lead to lots of changes in the compressed result, so generating a delta update may give you only minimal size reduction.
-
Don't compress bytes returned by Delta.Bytes() because they are already compressed using ZLib compression.
-
Every delta update adds about 156 bytes for the source and target hashes and various lengths, so it is not recommended for very miniscule updates.
package main import ( "fmt" "github.com/balacode/go-delta" ) func main() { fmt.Print("Binary delta update demo:\n\n") // The original data (20 bytes): var source = []byte("quick brown fox, lazy dog, and five boxing wizards") fmt.Print("The original is:", "\n", string(source), "\n\n") // The updated data containing the original and new content (82 bytes): var target = []byte( "The quick brown fox jumps over the lazy dog. " + "The five boxing wizards jump quickly.", ) fmt.Print("The update is:", "\n", string(target), "\n\n") var dbytes []byte { // Use Make() to generate a compressed patch from source and target var d = delta.Make(source, target) // Convert the delta to a slice of bytes (e.g. for writing to a file) dbytes = d.Bytes() } // Create a Delta from the byte slice var d = delta.Load(dbytes) // Apply the patch to source to get the target // The size of the patch is much shorter than target. var target2, err = d.Apply(source) if err != nil { fmt.Println(err) } fmt.Print("Patched:", "\n", string(target2), "\n\n") } // main