|
|
@@ -1,24 +1,87 @@
|
|
|
-[](https://godoc.org/github.com/pierrec/lz4)
|
|
|
+# lz4 : LZ4 compression in pure Go
|
|
|
|
|
|
-# lz4
|
|
|
-LZ4 compression and decompression in pure Go.
|
|
|
+## Overview [](https://godoc.org/github.com/pierrec/lz4) [](https://travis-ci.org/pierrec/lz4) [](https://goreportcard.com/report/github.com/pierrec/lz4)
|
|
|
|
|
|
-## Usage
|
|
|
+This package provides a streaming interface to [LZ4 data streams](http://fastcompression.blogspot.fr/2013/04/lz4-streaming-format-final.html) as well as low level compress and uncompress functions for LZ4 data blocks.
|
|
|
+The implementation is based on the reference C [one](https://github.com/lz4/lz4).
|
|
|
+
|
|
|
+## Install
|
|
|
+
|
|
|
+Assuming you have the go toolchain installed:
|
|
|
+
|
|
|
+```
|
|
|
+go get github.com/pierrec/lz4
|
|
|
+```
|
|
|
+
|
|
|
+There is a command line interface tool to compress and decompress LZ4 files.
|
|
|
+
|
|
|
+```
|
|
|
+go install github.com/pierrec/lz4/cmd/lz4c
|
|
|
+```
|
|
|
+
|
|
|
+Usage
|
|
|
+
|
|
|
+```
|
|
|
+Usage of lz4c:
|
|
|
+ -version
|
|
|
+ print the program version
|
|
|
+
|
|
|
+Subcommands:
|
|
|
+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> ...]
|
|
|
|
|
|
-```go
|
|
|
-import "github.com/pierrec/lz4"
|
|
|
```
|
|
|
|
|
|
-## Description
|
|
|
-Package lz4 implements reading and writing lz4 compressed data (a frame),
|
|
|
-as specified in http://fastcompression.blogspot.fr/2013/04/lz4-streaming-format-final.html.
|
|
|
|
|
|
-This package is **compatible with the LZ4 frame format** although the block level compression
|
|
|
-and decompression functions are exposed and are fully compatible with the lz4 block format
|
|
|
-definition, they are low level and should not be used directly.
|
|
|
+## Example
|
|
|
+
|
|
|
+```
|
|
|
+// Compress and uncompress an input string.
|
|
|
+s := "hello world"
|
|
|
+r := bytes.NewReader([]byte(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
|
|
|
+```
|
|
|
+
|
|
|
+## Contributing
|
|
|
+
|
|
|
+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)
|
|
|
+
|
|
|
+## Contributors
|
|
|
+
|
|
|
+Thanks to all contributors so far.
|
|
|
|
|
|
-For a complete description of an lz4 compressed block, see:
|
|
|
-http://fastcompression.blogspot.fr/2011/05/lz4-explained.html
|
|
|
+Special thanks to [@Zariel](https://github.com/Zariel) for his asm implementation of the decoder
|
|
|
|
|
|
-See https://github.com/Cyan4973/lz4 for the reference C implementation.
|
|
|
+## License
|
|
|
|
|
|
+MIT.
|