- Notifications
You must be signed in to change notification settings - Fork144
LZ4 compression and decompression in pure Go
License
pierrec/lz4
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This package provides a streaming interface toLZ4 data streams as well as low level compress and uncompress functions for LZ4 data blocks.The implementation is based on the reference Cone.
Assuming you have the go toolchain installed:
go get github.com/pierrec/lz4/v4
There is a command line interface tool to compress and decompress LZ4 files.
go install github.com/pierrec/lz4/v4/cmd/lz4c@latest
Usage
Usage of lz4c: -version print the program versionSubcommands:Compress the given files or from stdin to stdout.compress [arguments] [<file name> ...] -bc enable block checksum -l int compression level (0=fastest) -sc disable stream checksum -size string block max size [64K,256K,1M,4M] (default "4M")Uncompress the given files or from stdin to stdout.uncompress [arguments] [<file name> ...]
// Compress and uncompress an input string.s := "hello world"r := strings.NewReader(s)// The pipe will uncompress the data from the writer.pr, pw := io.Pipe()zw := lz4.NewWriter(pw)zr := lz4.NewReader(pr)go func() {// Compress the input string._, _ = io.Copy(zw, r)_ = zw.Close() // Make sure the writer is closed_ = pw.Close() // Terminate the pipe}()_, _ = io.Copy(os.Stdout, zr)// Output:// hello world
Contributions are very welcome for bug fixing, performance improvements...!
- Open an issue with a proper description
- Send a pull request with appropriate test case(s)
Thanks to allcontributors so far!
Special thanks to@Zariel for his asm implementation of the decoder.
Special thanks to@greatroar for his work on the asm implementations of the decoder for amd64 and arm64.
Special thanks to@klauspost for his work on optimizing the code.
About
LZ4 compression and decompression in pure Go