(java) Запись в файл little endian
Я пытаюсь написать TIFF IFD, и я ищу простой способ сделать следующее (этот код явно ошибочен, но он получает идею через то, что я хочу):
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)
Будет писать:
0c00 0301 0300 0100 0000 0100 0000
Я знаю, как получить метод записи, чтобы занять правильное количество байтов (writeInt, writeChar и т.д.), но я не знаю, как заставить его писать в little endian. Кто-нибудь знает?
Ответы
Ответ 1
Возможно, вам стоит попробовать что-то вроде этого:
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();
Ответ 2
ByteBuffer, по-видимому, лучший выбор. Вы также можете написать некоторые удобные функции, такие как
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);
}
Ответ 3
Отметьте ByteBuffer, в частности 'order '. ByteBuffer - это благословение для тех из нас, кто должен взаимодействовать с чем-либо, кроме Java.