在Java中,当使用DataOutputStream写入文件时,如何定义正在写入的数据的Endian?

我正在使用DataOutputStream写入文件,但我想更改数据的endian。

这就是我将字节数据写入文件的方式(默认情况下以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编写的Endian?

你无法使用DataOutputStream ,它总是使用big endian。

可以使用ByteBuffer ,您可以在其上调用order()来影响它读取和写入数据的方式。

您可以使用ByteBuffer来准备一个byte[] ,您将在稍后使用经典的OutputStream编写完全转到NIO并使用任何WritableByteChannel进行编写

您可以使用: com.google.common.io.LittleEndianDataOutputStream from

https://google.github.io/guava/releases/17.0/api/docs/com/google/common/io/LittleEndianDataOutputStream.html或复制此课程: http : //www.cafeaulait.org/books/javaio/ ioexamples / 07 / LittleEndianOutputStream.java

你不能 :

将底层输出流的short写为两个字节,高字节优先。

所有“多字节”方法都是这样的。 如果你需要反过来,你需要自己编写字节。

它以DataInputStream可读的方式输出数据。

如果您不得不担心字节序,则不应使用Data * Stream。

所有给出的答案都是正确的。 但是,您可以获取DataOutputStream的源代码,将其粘贴到新类中,并反转各种writeShort,writeLong等中的字节顺序(或至少在您需要的那些中)。 这不是一项艰巨的工作。

显然你不能用它来与另一端的DataInputStream通信,但我想你需要在另一端用C程序写入文件或套接字,所以你不需要DataInputStream。