go中读取xz文件

时间:2013-10-24 01:36:15

标签: go xz

如何在go程序中阅读xz个文件?当我尝试使用lzma阅读时,我收到error in lzma header错误。

2 个答案:

答案 0 :(得分:8)

您有3个选项。

  1. 尝试使用另一个库,也许是使用cgo的库。我看到两个here
  2. 直接使用cgo /制作自己的lib。
  3. 使用xz可执行文件。
  4. 选项三比听起来容易。以下是我要使用的内容:

    func xzReader(r io.Reader) io.ReadCloser {
        rpipe, wpipe := io.Pipe()
    
        cmd := exec.Command("xz", "--decompress", "--stdout")
        cmd.Stdin = r
        cmd.Stdout = wpipe
    
        go func() {
            err := cmd.Run()
            wpipe.CloseWithError(err)
        }()
    
        return rpipe
    }
    

    此处可运行代码:http://play.golang.org/p/SrgZiKdv9a

答案 1 :(得分:2)

我最近创建了一个XZ解压缩包。它不需要Cgo。你可以在这里找到它:

https://github.com/xi2/xz

将stdin解压缩到stdout的程序:

package main

import (
    "io"
    "log"
    "os"

    "github.com/xi2/xz"
)

func main() {
    r, err := xz.NewReader(os.Stdin, 0)
    if err != nil {
        log.Fatal(err)
    }
    _, err = io.Copy(os.Stdout, r)
    if err != nil {
        log.Fatal(err)
    }
}