2009-09-08 13 views
16

Sto cercando di scrivere TIFF IFDs, e sto cercando un modo semplice per eseguire le seguenti operazioni (questo codice, ovviamente, non e 'corretto ma ottiene l'idea attraverso di ciò che voglio) :(java) di scrittura nel file di 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) 

avrebbe scritto:

0C00 0301 0300 0100 0000 0100 0000

so come ottenere il metodo di scrittura a prendere il numero corretto di byte (writeInt, writeChar, ecc), ma Non so come farlo scrivere in little endian. Qualcuno sa?

risposta

31

Forse si dovrebbe provare qualcosa di simile:

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 per il codice di esempio – dhable

6

Partenza ByteBuffer, in particolare il metodo di 'order'. ByteBuffer è una benedizione per quelli di noi che hanno bisogno di interfacciarsi con qualsiasi cosa non sia Java.

7

ByteBuffer è apparentemente la scelta migliore. È anche possibile scrivere alcune funzioni di comodità come questa,

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); 
} 
Problemi correlati