Maison >développement back-end >Golang >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 !
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()
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 ?
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) } }
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
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
$ java -jar ~/Downloads/abe.jar unpack backup.ab backup3.tar $ md5sum backup*.tar 3eff01578dec035367688e03b6ec7a72 backup2.tar 3eff01578dec035367688e03b6ec7a72 backup3.tar 3eff01578dec035367688e03b6ec7a72 backup.tar
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!