Rumah >pembangunan bahagian belakang >Golang >Saya ingin menyahmampat fail .ab yang disandarkan oleh adb dan menulisnya ke dalam pakej tar

Saya ingin menyahmampat fail .ab yang disandarkan oleh adb dan menulisnya ke dalam pakej tar

WBOY
WBOYke hadapan
2024-02-10 08:15:171137semak imbas

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!

Kandungan soalan

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?

Penyelesaian

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

Mencuba https://www.php.cn/link/6e67691b60ed3e4a55935261314dd534 a> dan mendapat hasil yang sama. Oleh itu backup.ab fail harus rosak.

$ 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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam