Rumah >pembangunan bahagian belakang >Golang >Saya ingin menyahmampat fail .ab yang disandarkan oleh adb dan menulisnya ke dalam pakej tar
Editor PHP Zimo boleh membantu anda menjawab soalan tentang menyahmampat fail .ab yang disandarkan oleh adb dan menulisnya ke dalam pakej tar. adb backup ialah kaedah sandaran dalam sistem Android dan fail sandaran yang dijana mempunyai nama akhiran .ab. Jika anda ingin menyahmampat dan menulis bola tar, anda boleh melakukannya dengan menggunakan alat ADB dan arahan tar. Mula-mula, gunakan arahan ADB untuk menukar fail .ab kepada pakej tar, dan kemudian gunakan arahan tar untuk menyahmampat pakej tar. Dengan cara ini anda boleh memulihkan fail sandaran ke tarball. Harap jawapan ini membantu anda!
Saya akan mengendalikannya seperti berikut
bf, err := os.Open(backupFilePath) if err != nil { fmt.Println("os.Open: ", err) return } defer bf.Close() rd := bufio.NewReader(bf) tarFile, err := os.Create(tarFilePath) if err != nil { fmt.Println("os.Create: ", err) return } defer tarFile.Close() zf, zerr := zlib.NewReader(rd) if zerr != nil { return "", zerr } _, err = io.Copy(tarFile, zf) if err != nil { fmt.Println("io.Copy backup.ab -> backup.ab.tar failed: ", err) } zf.Close()
Ralat berlaku: io.copy backup.ab -> backup.ab.tar failed: unexpected eof
Adakah ini berlaku kerana fail .ab rosak atau kaedah pemprosesan salah?
Kemungkinan besar fail .ab rosak.
Tetapi terdapat masalah dengan kod anda juga. 24 bait pertama harus dilangkau apabila membaca daripada fail .ab. Jika tidak, anda sepatutnya melihat ralat ini: zlib:无效的标头
. Memandangkan anda melihat sesuatu yang lain, saya akan menganggap fail .ab anda rosak.
By the way, tiada rd := bufio.newreader(bf)
diperlukan.
Ini adalah demo yang sesuai untuk saya:
package main import ( "compress/zlib" "io" "os" ) func main() { bf, err := os.open("temp.ab") if err != nil { panic(err) } defer bf.close() if _, err := bf.seek(24, 0); err != nil { panic(err) } zf, err := zlib.newreader(bf) if err != nil { panic(err) } defer zf.close() tarfile, err := os.create("temp.tar") if err != nil { panic(err) } defer tarfile.close() _, err = io.copy(tarfile, zf) if err != nil { panic(err) } }
Kemas kini:
Menguji demo menggunakan backup.ab dan tiada ralat dilaporkan. Tetapi fail tar yang dijana tidak sah:
$ tar tvf backup.tar <...list of files truncated...> tar: unexpected eof in archive tar: error is not recoverable: exiting now
Cuba guna zlib-flate
dan mendapat hasil yang sama:
$ dd if=backup.ab ibs=24 skip=1 | zlib-flate -uncompress > backup2.tar $ md5sum backup*.tar 3eff01578dec035367688e03b6ec7a72 backup2.tar 3eff01578dec035367688e03b6ec7a72 backup.tar
$ java -jar ~/Downloads/abe.jar unpack backup.ab backup3.tar $ md5sum backup*.tar 3eff01578dec035367688e03b6ec7a72 backup2.tar 3eff01578dec035367688e03b6ec7a72 backup3.tar 3eff01578dec035367688e03b6ec7a72 backup.tar
Atas ialah kandungan terperinci Saya ingin menyahmampat fail .ab yang disandarkan oleh adb dan menulisnya ke dalam pakej tar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!