2009-09-08 10 views
16

लिखना मैं टीआईएफएफ आईएफडी लिखने की कोशिश कर रहा हूं, और मैं निम्नलिखित करने का एक आसान तरीका ढूंढ रहा हूं (यह कोड स्पष्ट रूप से गलत है लेकिन मुझे यह विचार मिलता है कि मैं क्या चाहता हूं) :(जावा) फ़ाइल में थोड़ा एंडियन

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

6

ByteBuffer, विशेष रूप से 'order' विधि देखें। बाइटबफर उन लोगों के लिए एक आशीर्वाद है जिन्हें जावा के साथ कुछ भी इंटरफेस करने की आवश्यकता नहीं है।

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