Heiner KückerLängencodierung für binäre Datenblöcke |
|
Home Java-Seite Alaska-XBase++-Seite Projekte Philosophien Techniken Konzepte Artikelsystematik Semantisches_Netz Flexible_Columns Weiterentwicklung_Java Fehlerquellen Längencodierung Encoding Programming_by_Contract TimelineStructure Datenstruktur für Kalender oder Terminplaner Sudoku Kontakt / Impressum Links SiteMap Letzte Aktualisierung: 02.12.2001 |
Längencodierung für binäre DatenblöckeSpeicherblöcke, die in einem linearem Adressraum wie dem RAM oder einer Datei gesepichert werden, benötigen eine Information über die Start-Adresse und die Größe des Speicherblockes. Die Verwendung eines festen Headers für die Länge, zum Beispiel 32 Bit, hat den Nachteil, daß bei geringer Größe zu viel Speicherplatz für den Header verschwendet wird und andererseits die maximale Größe des Speicherblockes von vornherein feststeht. Dafür schlage ich folgende Lösung vor: Ein Prefix(Header)-Byte gibt die Länge des Datenblockes als nicht vorzeichenbehaftete ganze Zahl an. Der Datenblock könnte eine maximale von Menge von 255 Byte aufnehmen. Die obersten 16 Werte (240 - 255) werden aber reserviert. +-------+-------+-------+---- ... ---+-------+-------+ |Prefix-| | | | | | |Byte | 0 | 0 | | 238 | 239 | | | | | | | | |0 - 239| | | | | | +-------+-------+-------+---- ... ---+-------+-------+Wenn das Prefix-Byte den Wert 240 hat, wird davon ausgegangen, daß zwei Byte für Größe des Datenblockes folgen. +-------+------+------+---- ... |Prefix-|Länge |Länge |Datenbytes |Byte |Byte 0|Byte 1|0 - 65535 | | | | | 240 | | | +-------+------+------+---- ...Wenn das Prefix-Byte den Wert 241 hat, wird davon ausgegangen, daß drei Byte für Größe des Datenblockes folgen. +-------+------+------+------+---- ... |Prefix-|Länge |Länge |Länge |Datenbytes |Byte |Byte 0|Byte 1|Byte 2|0 - 16777215 | | | | | | 241 | | | | +-------+------+------+------+---- ...Wenn das Prefix-Byte den Wert 242 hat, wird davon ausgegangen, daß vier Byte für Größe des Datenblockes folgen. +-------+------+------+------+------+---- ... |Prefix-|Länge |Länge |Länge |Länge |Datenbytes |Byte |Byte 0|Byte 1|Byte 2|Byte 3|0 - 4294967296 | | | | | | | 241 | | | | | +-------+------+------+------+------+---- ...So geht es weiter bis zum Prefix-Wert 255. Dann sind maximal 16 Byte für die Längenangabe vorhanden. +-------+------+---- ... ---+-------+---- ... |Prefix-|Länge | |Länge |Datenbytes |Byte |Byte 0| |Byte 15|0 - 3,4028236692093846346337460743177e+38 | | | | | | 241 | | | | +-------+------+---- ... ---+-------+---- ...So liegt die maximale Größe des Speicherblockes sehr hoch und es wird trotzdem nur wenig Speicherplatz für den Header verschwendet. Eventuell kann die Anzahl der reserviertem Werte des Prefix-Byte größer oder kleiner gewählt werden. |