2011-08-11 14 views
6

我正在使用DataOutputStream寫入文件,但是我想更改數據的字節順序。在Java中,當使用DataOutputStream寫入文件時,如何定義正在寫入的數據的Endian?

這是怎麼了我正在寫字節數據文件(其輸出在默認情況下,小尾數)

public void generateBinObjFile(String outputFile) 
    try { 
     // Create file 

     DataOutputStream stream = new DataOutputStream(
       new FileOutputStream(outputFile)); 

     stream.writeShort(this.quantize(this.xComponents.get(index), //<-- Short is written in little Endian 
        this.min_x, this.max_x) - 32768); 

     } // catch statements here 

有沒有一種方法,我可以定義的字節數據是如何用Java編寫的尾段?

回答

8

你不能這樣做DataOutputStream,它總是使用大端。

可以使用ByteBuffer,您可以在其中調用order()來影響其讀寫數據的方式。

可以使用ByteBuffer要麼準備一個byte[],你會得到一個經典OutputStream以後完全去NIO編寫和使用任何WritableByteChannel的書寫

+0

它說: 「無法實例化類型 '字節緩衝區'」 。我使用new關鍵字創建它的一個對象,是否有創建對象實例的不同或更正確的方法? – deztructicus

+1

@deztructius:請檢查我鏈接到的JavaDoc。 –

+1

你可以使用'ByteBuffer.allocateDirect(int size)' –

0

You cannot

寫入一個短到基礎輸出流中的兩個字節,高字節。

所有的「多字節」方法都是這樣工作的。 如果你反過來需要它,你需要自己寫字節。

0

它以DataInputStream可讀的方式輸出數據。

如果您不必擔心字節序,您不應該使用Data * Stream。

0

所有給出的答案是對。但是,您可以將DataOutputStream的源代碼粘貼到一個新的類中,並反轉各種writeShort,writeLong等中的字節順序(或至少在您需要的字節順序中)。這不是一件很難的工作。

很明顯,你不能用它來與另一端的DataInputStream進行通信,但是我想你需要寫一個帶有C程序的文件或套接字,所以你不需要DataInputStream。

相關問題