
كنت بحاجة إلى ذلك من أجل فهم مكان وكيفية تلف ملف JPEG أثناء النقل.
VCDIFF - تنسيق وخوارزمية لتشفير دلتا. تم وصفه في RFC 3284 .
ترميز دلتا (ترميز دلتا المهندس) - طريقة لتمثيل البيانات في شكل الفرق (دلتا) بين البيانات التسلسلية بدلاً من البيانات نفسها.
على سبيل المثال ، أستخدم ملفات نصية مشفرة في Windows-1251 للتوضيح. ولكن بنفس النجاح ، يمكن أن تكون هذه ملفات ثنائية.
مصادر:
" " ( source.txt ) " " ( target.txt )
تحتاج إلى معرفة الفرق بين الملفات:
" " ( source.txt -> target.txt ) " " ( target.txt -> source.txt )
أستخدم برنامج xdelta3 ، ولكن أعتقد أن أي شخص يعمل مع تنسيق vcdiff سيفعل.
كيف تحصل
سنحتاج إلى ملف آخر مليء بالمسافات:
" " ( spaces.txt )
يجب أن يكون أكبر أو يساوي في الحجم للملف المصدر (source.txt)
الفريق:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 -d -s spaces.txt
النتيجة:
الأعلام المستخدمة:
-e
- إنشاء دلتا
-A
- يزيل الرؤوس الزائدة
-n
- يزيل crc (لا يسمح باستخدام دلتا مع مصدر آخر)
-s []
- المصدر الذي تمت مقارنة الملف الهدف به واستعادته
-d
احصل على ملف الهدف من دلتا والمصدر
كيف يعمل
إذا قمت بتشغيل الأمر:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 printdelta
ثم بعد كل الرؤوس سنرى أوامر 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
تنسيق VCDIFF بسيط بطبيعته. يتكون من 3 فرق.
COPY
- نسخ البيانات من مصدر أو هدف
ADD
(add) - يكتب البيانات المخزنة في دلتا إلى الملف الهدف (البيانات الفريدة ليست في المصدر)
RUN
(تكرار) - يكرر بايت واحد من دلتا لعدد محدد من المرات
يخزن دلتا البيانات الفريدة فقط وينسخ الباقي من المصدر. إذا قمت بتشغيل الأمر:
xdelta3 -e -A -n -s source.txt target.txt > target.vcdiff
سوف نرى في الدلتا فقط كلمة "التغييرات" الموجودة فقط في الملف الهدف
D0A6D093D094200102011720131B2009 0302190D0A19200E
( لا يحب JSON الأحرف الخاصة ، لذلك قمت بترجمتها إلى HEX )
إذا تم تطبيق دلتا على المصدر (source.txt) ، فإننا نحصل على الملف الهدف (target.txt)
xdelta3 -d -s source.txt target.vcdiff
استبدال المصدر (source.txt) بملف مليء بمسافات (space.txt) استبدلنا البيانات المكررة في المصدر وفي الملف الهدف بمسافات.
xdelta3 -d -s spaces.txt target.vcdiff
يمكنك استخدام أي حرف آخر في ملف space.txt. الشرط الرئيسي هو أن يكون ملف المسافات.txt أكبر أو يساوي الحجم للملف المصدر.
في الواقع قارنت ملفات JPEG مثل هذا:
xdelta3 -e -A -n -s bad_image.jpg good_image.jpg | xdelta3 -d -s spaces.txt
نتيجة مقارنة هذه الملفات:
العديد من المساحات والبايتات التي "تعرضت للضرب". تم نقل وحدات البايت التالفة إلى HEX.
اختبار ملفات jpeg التي يمكنك اختبار طرق المقارنة عليها:
xdelta3 -e -A -n -s tortoise_bad.jpg tortoise.jpg | xdelta3 -d -s spaces.txt
نتيجة مقارنة هذه الملفات:
عرض النتيجة F1BF F0B786 F39BAF F3BD94
تم نقل وحدات البايت التالفة إلى HEX.