
Saya membutuhkan ini untuk memahami di mana dan bagaimana file JPEG rusak selama transfer.
VCDIFF - format dan algoritma untuk pengkodean delta. Dijelaskan dalam RFC 3284 .
Delta encoding (Eng. Delta encoding) - cara merepresentasikan data dalam bentuk perbedaan (delta) antara data serial dan bukan data itu sendiri.
Sebagai contoh, saya menggunakan file teks yang disandikan di Windows-1251 untuk kejelasan. Tetapi dengan keberhasilan yang sama, ini bisa berupa file biner.
Sumber:
" " ( source.txt ) " " ( target.txt )
Anda perlu mendapatkan perbedaan antara file:
" " ( source.txt -> target.txt ) " " ( target.txt -> source.txt )
Saya menggunakan program xdelta3, tetapi saya pikir ada orang yang bekerja dengan format vcdiff akan melakukannya.
Bagaimana cara mendapatkannya
Kami akan membutuhkan file lain yang diisi dengan spasi:
" " ( spaces.txt )
Ukurannya harus lebih besar atau sama dengan file sumber (source.txt)
Tim:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 -d -s spaces.txt
Hasil:
Bendera yang Digunakan:
-e
- membuat delta
-A
- menghapus kelebihan header
-n
- menghapus crc (tidak memungkinkan untuk menggunakan delta dengan sumber lain)
-s []
- sumber yang digunakan untuk membandingkan dan memulihkan file target
-d
- dapatkan file target dari delta dan sumber
Bagaimana cara kerjanya
Jika Anda menjalankan perintah:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 printdelta
Kemudian setelah semua header kita akan melihat perintah 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
Format VCDIFF pada dasarnya sangat sederhana. Ini terdiri dari 3 tim.
COPY
- menyalin data dari sumber atau target
ADD
(add) - menulis data yang disimpan dalam delta ke file target (data unik yang tidak ada di sumber)
RUN
(repeat) - mengulangi satu byte dari delta beberapa kali
Delta hanya menyimpan data unik dan menyalin sisanya dari sumber. Jika Anda menjalankan perintah:
xdelta3 -e -A -n -s source.txt target.txt > target.vcdiff
Kita akan melihat di delta hanya kata "perubahan" yang hanya ada di file target
D0A6D093D094200102011720131B2009 0302190D0A19200E
( JSON tidak suka karakter khusus, jadi saya menerjemahkannya ke HEX )
Jika delta diterapkan pada sumber (source.txt), maka kita mendapatkan file target (target.txt)
xdelta3 -d -s source.txt target.vcdiff
Mengganti sumber (source.txt) dengan file yang diisi dengan spasi (spasi.txt) kami mengganti data yang diulang dalam sumber dan di file target dengan spasi.
xdelta3 -d -s spaces.txt target.vcdiff
Anda dapat menggunakan karakter lain apa pun di file spasi.txt. Kondisi utama adalah bahwa file spasi.txt lebih besar atau berukuran sama dengan file sumber.
Sebenarnya saya membandingkan file JPEG seperti ini:
xdelta3 -e -A -n -s bad_image.jpg good_image.jpg | xdelta3 -d -s spaces.txt
Hasil membandingkan file-file ini:
Banyak spasi dan byte yang "dipukuli". Byte buruk ditransfer ke HEX.
Uji file jpeg tempat Anda dapat menguji metode perbandingan:
xdelta3 -e -A -n -s tortoise_bad.jpg tortoise.jpg | xdelta3 -d -s spaces.txt
Hasil membandingkan file-file ini:
Lihat hasil F1BF F0B786 F39BAF F3BD94
Byte buruk ditransfer ke HEX.