java 字节序,如何在Java中将大字节序ByteBuffer写入小字节序

I currently have a Java ByteBuffer that already has the data in Big Endian format. I then want to write to a binary file as Little Endian.

Here's the code which just writes the file still in 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();

}

}

}

Note that byteBuff is a ByteBuffer that has been filled in Big Endian format.

My last resort is a brute force method of creating another buffer and setting that ByteBuffer to little endian and then reading the "getInt" values from the original (big endian) buffer, and "setInt" the value to the little endian buffer. I'd imagine there is a better way...

解决方案

Endianess has no meaning for a byte[]. Endianess only matter for multi-byte data types like short, int, long, float, or double. The right time to get the endianess right is when you are writing the raw data to the bytes and reading the actual format.

If you have a byte[] given to you, you must decode the original data types and re-encode them with the different endianness. I am sure you will agree this is a) not easy to do or ideal b) cannot be done automagically.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值