Input/Output InputStream: 32-Bit-Ganzzahl (DWORD) binär lesen

HankScorpio

Mitglied
Hallo,

ich möchte ein bestimmtes Dateiformat auslesen, zu dem die Formatspezifikation vorliegt. In der Spezifikation könnte z.B. ein Schema stehen wie dieses:

- DWORD (32-Bit) id
- WORD (16-Bit) foo
- WORD (16-Bit) bar
- bar-mal UBYTE data

Jetzt überlege ich, wie ich diese unterschiedlich langen Ganzzahlen am elegantesten eingelesen und in ihre Java-Datentyp-Entsprechungen hineinbekomme. Der letzte Part, das Byte-"Array", ist ja relativ einfach und direkt hinzubekommen, aber wie lese ich am besten einen Integer- oder einen Short-Wert aus der Datei binär ein? (Mit "binär" meine ich: Es stehen tatsächlich 2 oder 4 Byte in der Datei und nicht irgendwie als Text "-421337".)
Ich könnte natürlich ein entsprechend langes Byte-Array einlesen und dann mit Bitschieberei und -manipulationen daraus "von Hand" Integer oder so "basteln", aber geht das nicht vielleicht eleganter und kürzer? Oder muss man hier das Rad tatsächlich neu erfinden? :-/

Noch ein Problem eventuell?? -> Die mehrbytigen Ganzzahlen liegen als Little-Endian-Werte vor. :-?

Wie würdet ihr vorgehen?

Viele Grüße und danke euch schon im Voraus!
Hank Scorpio
 
Danke für die schnelle Antwort zu so später Stunde! 🙂
Ich würde einfach Byte weise einlesen und die Bitoperatoren anwenden.
Jo, so habe ich mir mittlerweile auch beholfen.
Ich hatte nur - angesichts dessen, dass es für praktisch alles fertige Klassen gibt (Java <3) - vermutet, es gäbe da vielleicht auch schon etwas elegantes Fertiges. 🙂 Denn wenn dem so wäre, sähe die Behelfslösung natürlich etwas "grobmotorisch" aus... ;-)
 
Bytebuffer oder DataInputStreqam, der hat getInt, getShort ect. Falls die littel/big endian des formates mit Java übereinstimmt ist das damit noch ein bischen einfacherer
 
Danke für die schnelle Antwort zu so später Stunde! 🙂

Jo, so habe ich mir mittlerweile auch beholfen.
Ich hatte nur - angesichts dessen, dass es für praktisch alles fertige Klassen gibt (Java <3) - vermutet, es gäbe da vielleicht auch schon etwas elegantes Fertiges. 🙂 Denn wenn dem so wäre, sähe die Behelfslösung natürlich etwas "grobmotorisch" aus... ;-)

gibts doch auch ... nennt sich

java.io.DataInputStream
 

Neue Themen


Zurück
Oben