2009-09-08 90 views
16

我正在嘗試編寫TIFF IFD,並且正在尋找一種簡單的方法來執行以下操作(此代碼顯然是錯誤的,但它獲得了我想要的想法) :(java)寫入文件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) 

這樣寫:

0C00 0301 0300 0100 0000 0100 0000

我知道怎麼去寫作方法佔用字節(writeInt,類似於使用writeChar等)的正確數目,但我不知道如何用小端來寫。有人知道嗎?

回答

31

也許你應該嘗試這樣的事:

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 2009-09-08 16:06:45

6

檢出ByteBuffer,特別是'order'的方法。 ByteBuffer對於那些需要與Java之外的任何接口進行交互的人來說是一種幸福。

7

的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); 
} 
相關問題