Heiner Kücker

Lä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öcke

Speicherblö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.