go build -o lz4 main.go
cat file.txt | ./lz4 compress > file.txt.lz4
cat file.txt.lz4 | ./lz4 decompress > file.txt.bak
| package main | |
| import ( | |
| "bufio" | |
| "io" | |
| "os" | |
| "github.com/pierrec/lz4" | |
| kingpin "gopkg.in/alecthomas/kingpin.v2" | |
| ) | |
| var ( | |
| app = kingpin.New("lz4", "A command line tool for compressing files") | |
| compressCmd = app.Command("compress", "Compress stdin") | |
| decompressCmd = app.Command("decompress", "Decompress stdin") | |
| ) | |
| func main() { | |
| switch kingpin.MustParse(app.Parse(os.Args[1:])) { | |
| case compressCmd.FullCommand(): | |
| compress() | |
| case decompressCmd.FullCommand(): | |
| decompress() | |
| } | |
| } | |
| func compress() { | |
| bufWriter := bufio.NewWriter(os.Stdout) | |
| writer := lz4.NewWriter(bufWriter) | |
| writer.Header = lz4.Header{ | |
| BlockDependency: false, | |
| BlockChecksum: true, | |
| BlockMaxSize: 4 << 14, | |
| NoChecksum: false, | |
| HighCompression: true, | |
| } | |
| io.Copy(writer, bufio.NewReaderSize(os.Stdin, 4*1024*1024)) | |
| bufWriter.Flush() | |
| writer.Close() | |
| } | |
| func decompress() { | |
| io.Copy(os.Stdout, lz4.NewReader(os.Stdin)) | |
| } |