Bitwise XOR -> patching

Status
Nicht offen für weitere Antworten.

lumo

Top Contributor
hallo

ich weiss, dass es das schon gibt (als program bsdiff und bspatch)
hab gestern versucht das nachzucoden.
habs etwas vereinfacht...
im endeffekt geh ich mit dem xor über die bytes der beiden dateien.
schreibe das xor dann in ne dritte raus
wenn die dateien nicht viele unterschiede haben sollten sehr viele nullen und nur wenige einsen in der neuen datei sein...
wenn ich die neue file (patchfile) dann komprimiere sollte so gut wie nix übrigbleiben...
komischerweise ist dem nicht so...

(konnte die dateigrößenunterschiede nur minimal ändern) obwohl die datei nur minimal geändert ist...

any ideas?

PS: dass die patch datei genau gleich gross ist wie die neuere version (sofern größer als die alte) oder so groß wie die neue (sofern kleiner als die alte) ist mir klar ;)


PPS: kennt jemand eine java implementierung von bsdiff oder bspatch??
 

Wildcard

Top Contributor
Hast du dir die XOR Datei angesehen. Wirklich viele nullen und wenige einsen?
Welche Komprimierung verwendest du? RLC?
 

lumo

Top Contributor
ganz ehrlich gesagt hab ich mir die file selbst nicht angesehen,
aber die file muss korrekt sein,
denn ich hab den zweiten teil, des patchens auch schon implementiert und die MD5 und CRC bei der resultierenden file sind korrekt... -> das patchen klappt
zur zeit verwende ich WinRAR (getrennt von meinem programm)
komprimiere die datei per hand!

sollte ich mir testhalber die bytes als system out ausgeben lassen? (bzw wie kann ich mir die einzelnen bits ausgeben lassen und/oder reichen byte???)

PS: habe aber schon 7z in java und sowas in der art von TAR implementiert (die idee tar zu verwenden kam mir erst danach... leider)
 

Wildcard

Top Contributor
Ist der von RAR verwendete Algorithmus nicht Wörterbuch basiert?
Womöglich für deine Daten ungeeignet. Ich würde ein RLC Verfahren versuchen (sofern es sich wirklich um lange 0 Ketten handelt).
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben