2009-09-08 10 views
16

J'essaie d'écrire des IFD TIFF, et je cherche un moyen simple de faire ce qui suit (ce code est évidemment faux, mais il obtient l'idée de ce que je veux) :(java) Écrire dans le fichier 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) 

écrirait:

0C00 0301 0300 0100 0000 0100 0000

Je sais comment obtenir la méthode d'écriture pour prendre le nombre correct d'octets (writeInt, writeChar, etc.), mais Je ne sais pas comment l'écrire en petit boutiste. Quelqu'un sait?

Répondre

31

Peut-être que vous devriez essayer quelque chose comme ceci:

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 pour l'exemple de code – dhable

6

Extrayez le ByteBuffer, en particulier la méthode 'order'. ByteBuffer est une bénédiction pour ceux d'entre nous qui ont besoin d'interface avec tout ce qui n'est pas Java.

7

ByteBuffer est apparemment le meilleur choix. Vous pouvez également écrire des fonctions de commodité comme ceci,

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); 
} 
Questions connexes