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

时间:2011-08-11 10:04:57

标签: java io endianness

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

这就是我将字节数据写入文件的方式(默认情况下以Little end输出)

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?

5 个答案:

答案 0 :(得分:9)

你不能使用DataOutputStream,它总是使用大端。

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

您可以使用ByteBuffer 准备一个byte[],稍后您将使用或OutputStream >完全转到NIO并使用任何WritableByteChannel进行写作

答案 1 :(得分:3)

答案 2 :(得分:0)

You cannot

  

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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