
J'en avais besoin pour comprendre où et comment le fichier JPEG a été corrompu pendant le transfert.
VCDIFF - format et algorithme pour le codage delta. Décrit dans la RFC 3284 .
Encodage delta (Encodage delta Eng) - une façon de représenter les données sous la forme de la différence (delta) entre les données série au lieu des données elles-mêmes.
Par exemple, j'utilise des fichiers texte encodés dans Windows-1251 pour plus de clarté. Mais avec le même succès, il peut s'agir de fichiers binaires.
Sources:
" " ( source.txt ) " " ( target.txt )
Vous devez faire la différence entre les fichiers:
" " ( source.txt -> target.txt ) " " ( target.txt -> source.txt )
J'utilise le programme xdelta3, mais je pense que celui qui fonctionne avec le format vcdiff fera l'affaire.
Comment arriver
Nous aurons besoin d'un autre fichier rempli d'espaces:
" " ( spaces.txt )
Il doit être plus grand ou égal en taille au fichier source (source.txt)
Équipe:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 -d -s spaces.txt
Résultat:
Drapeaux utilisés:
-e
- crée un delta
-A
- supprime les en-têtes en excès
-n
- supprime crc (il ne permet pas d'utiliser le delta avec une autre source)
-s []
- la source avec laquelle le fichier cible est comparé et restauré
-d
- récupère le fichier cible du delta et de la source
Comment ça marche
Si vous exécutez la commande:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 printdelta
Ensuite, après tous les en-têtes, nous verrons les commandes VCDIFF
Offset Code Type1 Size1 @Addr1 + Type2 Size2 @Addr2 000000 025 CPY_0 9 S@0 000009 010 ADD 9 000018 025 CPY_0 9 S@14
Le format VCDIFF est intrinsèquement très simple. Il se compose de 3 équipes.
COPY
- copie les données d'une source ou d'une cible
ADD
(add) - écrit les données stockées dans le delta dans le fichier cible (dont les données uniques ne sont pas dans la source)
RUN
(répétition) - répète un octet du delta un nombre spécifié de fois
Delta stocke uniquement des données uniques et copie le reste de la source. Si vous exécutez la commande:
xdelta3 -e -A -n -s source.txt target.txt > target.vcdiff
On ne verra dans le delta que le mot "modifications" qui n'est que dans le fichier cible
D0A6D093D094200102011720131B2009 0302190D0A19200E
( JSON n'aime pas les caractères spéciaux, je les ai donc traduits en HEX )
Si le delta est appliqué sur la source (source.txt), alors nous obtenons le fichier cible (target.txt)
xdelta3 -d -s source.txt target.vcdiff
En remplaçant la source (source.txt) par un fichier rempli d'espaces (espaces.txt), nous avons remplacé les données qui sont répétées dans la source et dans le fichier cible par des espaces.
xdelta3 -d -s spaces.txt target.vcdiff
Vous pouvez utiliser n'importe quel autre caractère dans le fichier espaces.txt. La condition principale est que le fichier espaces.txt soit plus grand ou de taille égale au fichier source.
En fait, j'ai comparé des fichiers JPEG comme celui-ci:
xdelta3 -e -A -n -s bad_image.jpg good_image.jpg | xdelta3 -d -s spaces.txt
Le résultat de la comparaison de ces fichiers:
Beaucoup d'espaces et d'octets "battus". Octets incorrects transférés vers HEX.
Testez les fichiers jpeg sur lesquels vous pouvez tester les méthodes de comparaison:
xdelta3 -e -A -n -s tortoise_bad.jpg tortoise.jpg | xdelta3 -d -s spaces.txt
Le résultat de la comparaison de ces fichiers:
Afficher le résultat F1BF F0B786 F39BAF F3BD94
Octets incorrects transférés vers HEX.