簡體   English   中英

在 Java 中,使用 DataOutputStream 寫入文件時,如何定義正在寫入的數據的 Endian?

[英]In Java, when writing to a file with DataOutputStream, how do I define the Endian of the data being written?

我正在使用DataOutputStream寫入文件,但是我想更改數據的字節序。

這就是我將字節數據寫入文件的方式(默認情況下以 Little 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 的字節序?

您不能使用始終使用大端序的DataOutputStream來執行此操作。

可以使用可以調用order()ByteBuffer來影響它讀取和寫入數據的方式。

您可以使用ByteBuffer准備稍后將使用經典OutputStream寫入的byte[]go 完全用於 NIO 並使用任何WritableByteChannel進行寫入

你不能

將一個短路寫入底層 output stream 作為兩個字節,高字節在前。

所有的“多字節”方法都是這樣工作的。 如果你需要它,你需要自己寫字節。

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

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

所有給出的答案都是正確的。 但是,您可以獲取 DataOutputStream 的源,將其粘貼到新的 class 中,並顛倒各種 writeShort、writeLong 等中的字節順序。(或至少在您需要的那些中)。 這不是一項艱巨的工作。

顯然,您不能使用它與另一側的 DataInputStream 通信,但我想您需要使用另一側的 C 程序寫入文件或套接字,因此您不需要 DataInputStream。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM