Maison > développement back-end > Golang > le corps du texte

Je souhaite décompresser le fichier .ab sauvegardé par adb et l'écrire dans un package tar

WBOY
Libérer: 2024-02-10 08:15:17
avant
1080 Les gens l'ont consulté

Je souhaite décompresser le fichier .ab sauvegardé par adb et lécrire dans un package tar

L'éditeur PHP Zimo peut vous aider à répondre à la question sur la décompression du fichier .ab sauvegardé par adb et son écriture dans un package tar. La sauvegarde adb est une méthode de sauvegarde dans le système Android et le fichier de sauvegarde généré porte le suffixe .ab. Si vous souhaitez décompresser et écrire une archive tar, vous pouvez le faire en utilisant l'outil ADB et la commande tar. Tout d’abord, utilisez la commande ADB pour convertir le fichier .ab en un package tar, puis utilisez la commande tar pour décompresser le package tar. De cette façon, vous pouvez restaurer le fichier de sauvegarde dans l'archive tar. J'espère que cette réponse vous sera utile !

Contenu de la question

Je vais la gérer comme suit

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()
Copier après la connexion

Une erreur s'est produite : io.copy backup.ab -> échec de backup.ab.tar : eof inattendu

Est-ce que cela se produit parce que le fichier .ab est endommagé ou que la méthode de traitement est incorrecte ?

Solution

Il est très probable que le fichier .ab soit corrompu.

Mais il y a aussi un problème avec votre code. Les 24 premiers octets doivent être ignorés lors de la lecture de fichiers .ab. Sinon, vous devriez voir cette erreur : zlib:无效的标头. Puisque vous voyez autre chose, je vais supposer que votre fichier .ab est corrompu.

D'ailleurs, aucun rd := bufio.newreader(bf) n'est requis.

Voici la démo qui fonctionne pour moi :

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)
    }
}
Copier après la connexion

Mise à jour :

J'ai testé la démo en utilisant backup.ab et aucune erreur n'a été signalée. Mais le fichier tar généré n'est pas valide :

$ tar tvf backup.tar
<...list of files truncated...>
tar: unexpected eof in archive
tar: error is not recoverable: exiting now
Copier après la connexion

J'ai essayé d'utiliser zlib-flate et j'ai obtenu le même résultat :

$ dd if=backup.ab ibs=24 skip=1 | zlib-flate -uncompress > backup2.tar
$ md5sum backup*.tar
3eff01578dec035367688e03b6ec7a72  backup2.tar
3eff01578dec035367688e03b6ec7a72  backup.tar
Copier après la connexion

J'ai essayé https://www.php.cn/link/6e67691b60ed3e4a55935261314dd534 et j'ai obtenu le même résultat. Par conséquent backup.ab le fichier devrait être corrompu.

$ java -jar ~/Downloads/abe.jar unpack backup.ab backup3.tar
$ md5sum backup*.tar
3eff01578dec035367688e03b6ec7a72  backup2.tar
3eff01578dec035367688e03b6ec7a72  backup3.tar
3eff01578dec035367688e03b6ec7a72  backup.tar
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!