2009-09-08 33 views
16

Tôi đang cố gắng viết các IFD của TIFF và tôi đang tìm cách đơn giản để thực hiện những điều sau (mã này rõ ràng là sai nhưng nó có ý tưởng trên những gì tôi muốn) :(java) Viết trong tập tin ít 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) 

có viết:

0c00 0301 0300 0100 0000 0100 0000

tôi biết làm thế nào để có được những phương pháp bằng văn bản cho mất số byte đúng (writeInt, writeChar, vv) nhưng Tôi không biết làm thế nào để có được nó để viết trong ít endian. Có ai biết không?

Trả lời

31

Có lẽ bạn nên thử một cái gì đó như thế này:

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 cho mẫu mã – dhable

6

Khám phá ByteBuffer, cụ thể là phương thức 'order'. ByteBuffer là một phước lành cho những người trong chúng ta, những người cần phải giao tiếp với bất cứ thứ gì không phải Java.

7

ByteBuffer là rõ ràng là lựa chọn tốt hơn. Bạn cũng có thể viết một số chức năng tiện lợi như thế này,

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); 
} 
Các vấn đề liên quan