435c0d9fc8
This PR switches the Nomad repository from using govendor to Go modules for managing dependencies. Aspects of the Nomad workflow remain pretty much the same. The usual Makefile targets should continue to work as they always did. The API submodule simply defers to the parent Nomad version on the repository, keeping the semantics of API versioning that currently exists.
106 lines
2.9 KiB
Markdown
106 lines
2.9 KiB
Markdown
# lz4 : LZ4 compression in pure Go
|
|
|
|
[![GoDoc](https://godoc.org/github.com/pierrec/lz4?status.svg)](https://godoc.org/github.com/pierrec/lz4)
|
|
[![Build Status](https://travis-ci.org/pierrec/lz4.svg?branch=master)](https://travis-ci.org/pierrec/lz4)
|
|
[![Go Report Card](https://goreportcard.com/badge/github.com/pierrec/lz4)](https://goreportcard.com/report/github.com/pierrec/lz4)
|
|
[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/pierrec/lz4.svg?style=social)](https://github.com/pierrec/lz4/tags)
|
|
|
|
## Overview
|
|
|
|
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> ...]
|
|
|
|
```
|
|
|
|
|
|
## Example
|
|
|
|
```
|
|
// 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
|
|
```
|
|
|
|
## 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:
|
|
|
|
- [@klauspost](https://github.com/klauspost)
|
|
- [@heidawei](https://github.com/heidawei)
|
|
- [@x4m](https://github.com/x4m)
|
|
- [@Zariel](https://github.com/Zariel)
|
|
- [@edwingeng](https://github.com/edwingeng)
|
|
- [@danielmoy-google](https://github.com/danielmoy-google)
|
|
- [@honda-tatsuya](https://github.com/honda-tatsuya)
|
|
- [@h8liu](https://github.com/h8liu)
|
|
- [@sbinet](https://github.com/sbinet)
|
|
- [@fingon](https://github.com/fingon)
|
|
- [@emfree](https://github.com/emfree)
|
|
- [@lhemala](https://github.com/lhemala)
|
|
- [@connor4312](https://github.com/connor4312)
|
|
- [@oov](https://github.com/oov)
|
|
- [@arya](https://github.com/arya)
|
|
- [@ikkeps](https://github.com/ikkeps)
|
|
|
|
Special thanks to [@Zariel](https://github.com/Zariel) for his asm implementation of the decoder
|