我正在使用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?
答案 0 :(得分:9)
你不能使用DataOutputStream
,它总是使用大端。
您可以使用ByteBuffer
,您可以在其上调用order()
来影响其读取和写入数据的方式。
您可以使用ByteBuffer
准备一个byte[]
,稍后您将使用或OutputStream >完全转到NIO并使用任何WritableByteChannel
进行写作
答案 1 :(得分:3)
您可以使用: com.google.com.io.LittleEndianDataOutputStream 来自
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
答案 2 :(得分:0)
答案 3 :(得分:0)
它以DataInputStream可读的方式输出数据。
如果您不得不担心字节序,则不应使用Data * Stream。
答案 4 :(得分:0)
所有给出的答案都是正确的。但是,您可以获取DataOutputStream的源代码,将其粘贴到新类中,并反转各种writeShort,writeLong等中的字节顺序(或至少在您需要的那些中)。这不是一项艰巨的工作。
显然你不能用它来与另一端的DataInputStream通信,但我想你需要在另一端用C程序写入文件或套接字,所以你不需要DataInputStream。 / p>