Binary Input/Output effizient gestalten


#1
Hallo zusammen

Ich bin aktuell dabei in meinem Programm die verschiedenen Dateiformate zu implementieren, die ich verwenden werde. Gleich vorneweg, ich habe keinen Einfluss auf diese Dateiformate. Dabei bin ich auf ein kleines Problem, bzw eine kleine Unannehmlichkeit gestossen. Aus C++ und C# kommend bin ich mir gewohnt beispielsweise folgendes zu machen:
C++:
std::vector<byte> data(sizeof(M2Header));
mFile.read(data);
M2Header header = *(M2Header*)data.data();
C#:
byte[] data = new byte[Marshal.SizeOf(typeof(M2Header))];
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
M2Header header = *(M2Header*)handle.AddrOfPinnedObject().ToPointer();
Nun ist meine Frage ob es irgendwas vergleichbares auch in Java gibt. Weshalb ich das wirklich toll fände dürfte glaube ich klar werden, wenn ich kurz erläutere um was es geht:
Im Beispiel M2Header haben wir eine struct mit 65 Feldern. Davon sind etwa 25 Felder wiederum Adressen in der Datei auf neue Strukturen mit durchschnittlich 10-20 Feldern. Fakt ist, dass ich bisher in Java jedes Feld manuell von Hand auslesen muss, da ich nicht weiter komme als die primitiven Datentypen binär auszulesen. Das ist jetzt nur für die M2-Modelle, da folgen noch diverse weitere Formate mit teilweise noch mehr Daten. Da schreib ich mir einen Wolf ab jedes Feld einzeln auszulesen und ich sehe auch nicht warum ich das tun sollte irgendwie.

Ich hoffe auf eine positive Antwort und wünsche noch einen schönen Nachmittag
Cromon