帮酷LOGO
0 0 评论
文章标签:BIN  压缩  bro  COM  bindings  compress  
Go bindings for the Brotli compression library

  • 源代码名称:brotli-go
  • 源代码网址:http://www.github.com/kothar/brotli-go
  • brotli-go源代码文档
  • brotli-go源代码下载
  • Git URL:
    git://www.github.com/kothar/brotli-go.git
  • Git Clone代码到本地:
    git clone http://www.github.com/kothar/brotli-go
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/kothar/brotli-go
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • 绑定Brotli压缩库

    GoDocBuild Status

    有关 upstream C/C++ 源和 VERSION.md 文件,请参见 https://github.com/google/brotli,以查找当前vendored版本。

    用法

    使用绑定,只需导入enc或者dec包并调用go包装器函数 enc.CompressBuffer 或者 dec.DecompressBuffer"

    无错误处理的Naive压缩 解压缩示例:

    import (
     "gopkg.in/kothar/brotli-go.v0/dec""gopkg.in/kothar/brotli-go.v0/enc")funcbrotliRoundtrip(input []byte) []byte {
     // passing nil to get default *BrotliParams// careful, q=11 is the (extremely slow) defaultcompressed, _:= enc.CompressBuffer(nil, input, make([]byte, 0))
     decompressed, _:= dec.DecompressBuffer(compressed, make([]byte, 0))
     return decompressed
    }

    要获得更完整的往返示例,请阅读顶级文件 brotli_test.go

    使用 enc.BrotliParams 类型可以指定各种Brotli参数,例如 qualitylgwin ( 滑动窗口大小) 和 lgblock ( 输入块大小)。

    import (
     "gopkg.in/kothar/brotli-go.v0/enc")funcbrotliFastCompress(input []byte) []byte {
     params:= enc.NewBrotliParams()
     // brotli supports quality values from 0 to 11 included// 0 is the fastest, 11 is the most compressed but slowest params.SetQuality(0)
     compressed, _:= enc.CompressBuffer(params, input, make([]byte, 0))
     return compressed
    }

    高级用法( 流 API )

    如果数据集太大,无法放入内存,CompressBufferDecompressBuffer 就不是可行的选择。

    brotli-go 还公开了用于流压缩的接口:

    import (
     "gopkg.in/kothar/brotli-go.v0/enc")funcmain() {
     compressedWriter,_:= os.OpenFile("data.bin.bro", os.O_CREATE|os.O_WRONLY, 0644)
     brotliWriter:= enc.NewBrotliWriter(nil, compressedWriter)
     // BrotliWriter will close writer passed as argument if it implements io.Closerdefer brotliWriter.Close()
     fileReader, _:= os.Open("data.bin")
     defer fileReader.Close()
     io.Copy(brotliWriter,fileReader)
    }

    ..和解码:

    import (
     "gopkg.in/kothar/brotli-go.v0/dec")funcmain() {
     archiveReader, _:= os.Open("data.bin.bro")
     brotliReader:= dec.NewBrotliReader(archiveReader)
     defer brotliReader.Close()
     decompressedWriter,_:= os.OpenFile("data.bin.unbro", os.O_CREATE|os.O_WRONLY, 0644)
     defer decompressedWriter.Close()
     io.Copy(decompressedWriter, brotliReader)
    }

    绑定

    这是来自Brotli源的enc和dec目录的基础Cgo包装器。 我做了一些小改动,让 Go可以用。

    默认字典已被提取到单独的'shared '包中,以便在使用两者时允许链接enc和dec cgo模块。 否则会有重复的符号,如 dictionary.h 头文件中所述。

    为了避免链接器冲突,对dec包的字典变量名进行了修改。

    链接

    许可证

    Brotli和这些绑定在MIT许可下开源 - 请参阅LICENSE文件。



    文章标签:COM  bro  BIN  bindings  compress  压缩  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语