2009-09-08 15 views
16

TIFF IFD'ler yazmaya çalışıyorum ve aşağıdakileri yapmanın basit bir yolunu arıyorum (bu kod açıkça yanlıştır ama istediğim şeyin karşılığını alır) :(java) Dosyaya yazı yazıyor küçük endian

0c00 0301 0300 0100 0000 0100 0000

Ben bayt (writeInt, writeChar, vs) doğru sayıda almaya yazma yöntemi nasıl biliyorum ama:

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) 

yazar mısın Küçük endianda yazmayı nasıl bilmiyorum. Herkes biliyor mu?

cevap

31

Belki böyle bir şey denemelisiniz:

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 – dhable

6

ByteBuffer, özellikle 'order' yöntemini inceleyin. ByteBuffer, Java olmayan bir şeyle arabirim kurması gerekenler için bir nimettir.

7

ByteBuffer görünüşte daha iyi bir seçimdir. Kod örneği için, bu gibi bazı kolaylık işlevleri de yazabilirsiniz:

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