
Ich brauchte dies, um zu verstehen, wo und wie die JPEG-Datei während der Übertragung beschädigt wurde.
VCDIFF - Format und Algorithmus für die Delta-Codierung. Beschrieben in RFC 3284 .
Delta-Codierung (Eng. Delta-Codierung) - eine Möglichkeit, Daten in Form der Differenz (Delta) zwischen seriellen Daten anstelle der Daten selbst darzustellen.
Zum Beispiel verwende ich aus Gründen der Übersichtlichkeit in Windows-1251 codierte Textdateien. Bei gleichem Erfolg können dies jedoch Binärdateien sein.
Quellen:
" " ( source.txt ) " " ( target.txt )
Sie müssen den Unterschied zwischen den Dateien ermitteln:
" " ( source.txt -> target.txt ) " " ( target.txt -> source.txt )
Ich benutze das Programm xdelta3, aber ich denke, jeder, der mit dem vcdiff-Format arbeitet, wird es tun.
Wie komme ich?
Wir benötigen eine weitere Datei mit Leerzeichen:
" " ( spaces.txt )
Es muss größer oder gleich groß sein wie die Quelldatei (source.txt).
Team:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 -d -s spaces.txt
Ergebnis:
Verwendete Flaggen:
-e
- Erstelle ein Delta
-A
- entfernt überschüssige Header
-n
- entfernt crc (es erlaubt nicht, das Delta mit einer anderen Quelle zu verwenden)
-s []
- Die Quelle, mit der die Zieldatei verglichen und wiederhergestellt wird
-d
- -d
die Zieldatei aus Delta und Quelle ab
Wie funktioniert es?
Wenn Sie den Befehl ausführen:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 printdelta
Nach allen Headern sehen wir dann die VCDIFF-Befehle
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
Das VCDIFF-Format ist von Natur aus sehr einfach. Es besteht aus 3 Teams.
COPY
- kopiert Daten von einer Quelle oder einem Ziel
ADD
(Hinzufügen) - Schreibt im Delta gespeicherte Daten in die Zieldatei (eindeutige Daten befinden sich nicht in der Quelle).
RUN
(wiederholen) - Wiederholt ein Byte aus dem Delta eine bestimmte Anzahl von Malen
Delta speichert nur eindeutige Daten und kopiert den Rest von der Quelle. Wenn Sie den Befehl ausführen:
xdelta3 -e -A -n -s source.txt target.txt > target.vcdiff
Wir werden im Delta nur das Wort "Änderungen" sehen, das nur in der Zieldatei enthalten ist
D0A6D093D094200102011720131B2009 0302190D0A19200E
( JSON mag keine Sonderzeichen, deshalb habe ich sie in HEX übersetzt. )
Wenn das Delta auf die Quelle (source.txt) angewendet wird, erhalten wir die Zieldatei (target.txt).
xdelta3 -d -s source.txt target.vcdiff
Durch Ersetzen der Quelle (source.txt) durch eine mit Leerzeichen gefüllte Datei (space.txt) haben wir die Daten, die in der Quell- und in der Zieldatei wiederholt werden, durch Leerzeichen ersetzt.
xdelta3 -d -s spaces.txt target.vcdiff
Sie können jedes andere Zeichen in der Datei space.txt verwenden. Die Hauptbedingung ist, dass die Datei space.txt größer oder gleich groß wie die Quelldatei ist.
Eigentlich habe ich JPEG-Dateien wie folgt verglichen:
xdelta3 -e -A -n -s bad_image.jpg good_image.jpg | xdelta3 -d -s spaces.txt
Das Ergebnis des Vergleichs dieser Dateien:
Viele Leerzeichen und Bytes, die "geschlagen" wurden. Ungültige Bytes an HEX übertragen.
Testen Sie JPEG-Dateien, an denen Sie Vergleichsmethoden testen können:
xdelta3 -e -A -n -s tortoise_bad.jpg tortoise.jpg | xdelta3 -d -s spaces.txt
Das Ergebnis des Vergleichs dieser Dateien:
Ergebnis anzeigen F1BF F0B786 F39BAF F3BD94
Ungültige Bytes an HEX übertragen.