[英]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
進行寫入
您可以使用: com.google.common.io.LittleEndianDataOutputStream
https://google.github.io/guava/releases/17.0/api/docs/com/google/common/io/LittleEndianDataOutputStream.html or copy this class: http://www.cafeaulait.org/books/javaio/ ioexamples/07/LittleEndianOutputStream.java
它以 DataInputStream 可讀的方式輸出數據。
如果您必須擔心字節順序,則不應使用 Data*Stream。
所有給出的答案都是正確的。 但是,您可以獲取 DataOutputStream 的源,將其粘貼到新的 class 中,並顛倒各種 writeShort、writeLong 等中的字節順序。(或至少在您需要的那些中)。 這不是一項艱巨的工作。
顯然,您不能使用它與另一側的 DataInputStream 通信,但我想您需要使用另一側的 C 程序寫入文件或套接字,因此您不需要 DataInputStream。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.