(Java) Schreiben in Datei Little-Endian
-
21-09-2019 - |
Frage
Ich versuche, TIFF IFDs zu schreiben, und ich bin auf der Suche nach einer einfachen Möglichkeit folgendes zu tun (dieser Code ist offensichtlich falsch, aber es kommt auf die Idee über, was ich will):
out.writeChar(12) (bytes 0-1)
out.writeChar(259) (bytes 2-3)
out.writeChar(3) (bytes 4-5)
out.writeInt(1) (bytes 6-9)
out.writeInt(1) (bytes 10-13)
schreiben würde:
0C00 0301 0300 0100 0000 0100 0000
Ich weiß, wie das Schreiben Methode, um die richtige Anzahl von Bytes zu übernehmen (writeInt, writeChar, etc), aber ich weiß nicht, wie es zu bekommen in Little-Endian zu schreiben. Wer weiß?
Lösung
Vielleicht sollten Sie so etwas wie dies versuchen:
ByteBuffer buffer = ByteBuffer.allocate(1000);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.putChar((char) 12);
buffer.putChar((char) 259);
buffer.putChar((char) 3);
buffer.putInt(1);
buffer.putInt(1);
byte[] bytes = buffer.array();
Andere Tipps
ByteBuffer ist offenbar die bessere Wahl. Sie können auch einige Komfortfunktionen wie folgt schreiben,
public static void writeShortLE(DataOutputStream out, short value) {
out.writeByte(value & 0xFF);
out.writeByte((value >> 8) & 0xFF);
}
public static void writeIntLE(DataOutputStream out, int value) {
out.writeByte(value & 0xFF);
out.writeByte((value >> 8) & 0xFF);
out.writeByte((value >> 16) & 0xFF);
out.writeByte((value >> 24) & 0xFF);
}
Schauen Sie sich ByteBuffer , speziell die ‚ Methode ‚bestellen . ByteBuffer ist ein Segen für diejenigen von uns, die mit allem, was Schnittstelle brauchen nicht Java.