Double aus DataInputSream lesen
-
Hallo alle,
mein Ziel ist es ein Java-Programm zu schreiben,
dass einen Double Wert aus einer Datei ausliest.
Soweit so einfach.Dieser Double-Wert wurde aber mit C++ binär in die Datei geschrieben.
myDataInputStream.readDouble();
funktioniert nicht richtig.
Gibt es eine andere Möglichkeit?
-
Ich vermute mal, dass die binäre Umsetzung des Doublewerts hier das Problem ist. Ansich nutzt Java Big Endian um Daten im Speicher abzulegen. Auf der x86-Architektur wird aber Little Endian eingesetzt. Daher lassen sich dabei binäre Daten nicht direkt einlesen.
Du kannst einen ByteBuffer benutzen. Wenn du in diesen deine eingelesenen Bytes ablegst und mit der Methode order die Byteorder auf Little Endian setzt, kannst du ohne tiefergehendes Wissen auch dein Double wieder auslesen.
Hier ein kurzes Codebeispiel aus meinem Projekt:
double value = 0; byte[] actIntData = new byte[DOUBLE_BYTE_SIZE]; int bytes = pIS.read(actIntData); // pIS ist ein InputStream if(bytes == DOUBLE_BYTE_SIZE) { ByteBuffer actInt = ByteBuffer.wrap(actIntData); actInt.order(ByteOrder.LITTLE_ENDIAN); value = actInt.getDouble(); }
Ich hoffe, dass das weiterhilft.