2009-09-08 14 views
16

Estoy tratando de escribir TIFF IFD, y estoy buscando una manera simple de hacer lo siguiente (este código obviamente está mal, pero hace que la idea sea lo que quiero) :(java) Escribiendo en el archivo little endian

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) 

escribiría:

0C00 0301 0300 0100 0000 0100 0000

sé cómo sacar el método de escritura para ocupar el número correcto de bytes (writeInt, writeChar, etc), pero No sé cómo escribir en little endian. ¿Nadie sabe?

Respuesta

31

Tal vez debería intentar algo como esto:

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();  
+0

+1 para código de muestra – dhable

6

Consulte ByteBuffer, específicamente el método 'order'. ByteBuffer es una bendición para aquellos de nosotros que necesitamos interactuar con cualquier cosa que no sea Java.

7

ByteBuffer es al parecer la mejor opción. También puede escribir algunas funciones de conveniencia como esta,

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); 
} 
Cuestiones relacionadas