Zstd算法Golang应用

shengjuntu · · 4400 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

 

https://github.com/datadog/zstd

 

import (

“zstd"

"io"

)

type ZstdEncoder struct {
    File *os.File
    ZstdWriter *zstd.Writer
}

 

//level是压缩级别:1~19,越大越慢。默认为3

func NewZstdEncoder(filename string, level int) (*ZstdEncoder,error) {
    f,err := os.Create(filename)
    if err != nil {
        return nil, err
    }

    w := zstd.NewWriterLevel(f,level)
    return &ZstdEncoder{File:f,ZstdWriter:w},nil
}

func (s *ZstdEncoder) Close() {

    s.ZstdWriter.Close()
    s.File.Close()
}

func ZstdCompressFile(dst,src string, compress_level int) error {
    //log.Println("Zstd ", src, "->", dst)
    s,err := NewZstdEncoder(dst,compress_level)
    defer s.Close()
    if err != nil {
        return err
    }
    src_file,err := os.Open(src)
    if err != nil {
        return err
    }
    defer src_file.Close()
    io.Copy(s.ZstdWriter, src_file)
    
    return nil
}

func ZstdDecompressFile(dst, src string) error {
    //log.Println("Zstd ", src, "->", dst)
    in_file, err := os.Open(src)
    if err != nil {
        return err
    }
    defer in_file.Close()
    out_file, err := os.Create(dst)
    if err != nil {
        return err
    }
    defer out_file.Close()

    zst_reader := zstd.NewReader(in_file)
    io.Copy(out_file, zst_reader)

    return nil
}


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:shengjuntu

查看原文:Zstd算法Golang应用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4400 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传