我目前有一个 Java ByteBuffer,它已经包含 Big Endian 格式的数据。然后我想将二进制文件写入 Little Endian。
这里是仍然以 Big Endian 格式写入文件的代码:
public void writeBinFile(String fileName, boolean append) throws FileNotFoundException, IOException
{
FileOutputStream outStream = null;
try
{
outStream = new FileOutputStream(fileName, append);
FileChannel out = outStream.getChannel();
byteBuff.position(byteBuff.capacity());
byteBuff.flip();
byteBuff.order(ByteOrder.LITTLE_ENDIAN);
out.write(byteBuff);
}
finally
{
if (outStream != null)
{
outStream.close();
}
}
}
注意byteBuff是一个已经按照Big Endian格式填充的ByteBuffer。
我的最后一招是创建另一个缓冲区并将该 ByteBuffer 设置为小端,然后从原始(大端)缓冲区读取“getInt”值,并将值“setInt”到小端缓冲区的蛮力方法.我想有更好的方法...
最佳答案
Endianess 对于 byte[] 没有意义。字节序只对多字节数据类型有影响,如 short、int、long、float 或 double。获得字节顺序正确的正确时间是当您将原始数据写入字节并读取实际格式时。
如果给你一个 byte[],你必须解码原始数据类型并用不同的字节顺序重新编码它们。我相信您会同意这是 a) 不容易做到或不理想 b) 不能自动完成。
关于java - 如何在 Java 中将大端 ByteBuffer 写入小端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14496893/