이동 프로그램에서 xz 파일을 읽으려면 어떻게해야합니까? lzma
을 사용하여 읽으려고하면 error in lzma header
오류가 발생합니다.이동 중에 xz 파일 읽기
3
A
답변
8
세 가지 옵션이 있습니다.
- cgo를 사용하는 다른 라이브러리를 사용해보십시오. 나는 두 개의 here을 본다.
- 직접 cgo를 사용하거나 자신의 lib를 만드십시오.
- xz 실행 파일을 사용하십시오.
옵션 3은 소리보다 쉽습니다. 여기 내가 사용하는 것이 무엇 : 여기
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 코드 : http://play.golang.org/p/SrgZiKdv9a
+0
고마워, 나는 어떻게 든 godoc.org와이 놀랄만큼 간단한 파이핑을 놓쳤다. – phihag
+1
옵션 3 솔루션은 일반적으로 다양한 쉘 명령을 Go 프로그램에 통합하는 데 유용합니다. –
2
나는 최근에 XZ 압축 해제 패키지를 만들었습니다. Cgo는 필요하지 않습니다. 당신은 여기에서 찾을 수 있습니다
표준 출력에 표준 입력을 압축 해제 프로그램 :이 라이브러리는`xz` 아카이브에서 사용하는 LZMA2를 LZMA를 지원하지 같은데요
package main
import (
"io"
"log"
"os"
"xi2.org/x/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)
}
}
을 . – nemo