java - 如何在 Java 中将大端 ByteBuffer 写入小端

标签 java bytebuffer endianness

我目前有一个 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/

相关文章:

java - 显示队列数组元素

textures - LibGDX 纹理到 ByteBuffer

c - 我如何检查该程序是否独立运行?

perl - 使用 perl 查找系统是小端还是大端

java - 如何将 2 个独立的 JPanel 添加在一起以获得 1 个 JPanel?

java - 正则表达式仅从 xml 标签中删除 uri 前缀(标签内)

Java 从 byte[] 到 char[] 的转换

c# - Mp3文件的PCM数据存储是否依赖Big Endian和Little Endian?

c# - asp.net mvc开发者的Java框架推荐

java - 直接 java.nio.ByteBuffer 与 Java Array 性能测试