英文:
Read xz files in go
问题
你可以在Go程序中如何读取xz文件?当我尝试使用lzma
读取时,出现了error in lzma header
错误。
英文:
How can I read xz files in a go program? When I try to read them using lzma
, I get an error in lzma header
error.
答案1
得分: 9
你有3个选项。
- 尝试另一个库,也许是使用cgo的库。我在这里找到了两个链接。
- 直接使用cgo/制作自己的库。
- 使用xz可执行文件。
选项三比听起来要简单。这是我会使用的代码:
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
英文:
You have 3 options.
- Try another library, perhaps one that uses cgo. I see two here.
- Use cgo directly/make your own lib.
- Use the xz executable.
Option three is easier than it sounds. Here is what I would use:
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
}
Runnable code here: http://play.golang.org/p/SrgZiKdv9a
答案2
得分: 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)
}
}
英文:
I recently created an XZ decompression package. It does not require Cgo. You can find it here:
<https://github.com/xi2/xz>
A program to decompress stdin to 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)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论