(java) Запись в файл с прямым порядком байтов

Я пытаюсь написать 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 и т. д.), но я не знаю, как заставить его писать с прямым порядком байтов. Кто-нибудь знает?


person Tony Stark    schedule 08.09.2009    source источник


Ответы (3)


Возможно, вам стоит попробовать что-то вроде этого:

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();     
person xap4o    schedule 08.09.2009

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);
}
person ZZ Coder    schedule 08.09.2009

Ознакомьтесь с ByteBuffer, особенно с ' порядок' метод. ByteBuffer — это благословение для тех из нас, кому нужно взаимодействовать с чем-либо, кроме Java.

person Chris Arguin    schedule 08.09.2009