我有短[512x512]数组需要使用小端写入二进制文件。我知道如何用 little endian 写一个短文件。我认为可能有更好的方式而不是循环编写逐个的数组。
答案 0 :(得分:7)
有点像这样:
short[] payload = {1,2,3,4,5,6,7,8,9,0};
ByteBuffer myByteBuffer = ByteBuffer.allocate(20);
myByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
ShortBuffer myShortBuffer = myByteBuffer.asShortBuffer();
myShortBuffer.put(payload);
FileChannel out = new FileOutputStream("sample.bin").getChannel();
out.write(myByteBuffer);
out.close();
有点像这样才能找回来:
ByteBuffer myByteBuffer = ByteBuffer.allocate(20);
myByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
FileChannel in = new FileInputStream("sample.bin").getChannel();
in.read(myByteBuffer);
myByteBuffer.flip();
in.close(); // do not forget to close the channel
ShortBuffer myShortBuffer = myByteBuffer.asShortBuffer();
myShortBuffer.get(payload);
System.out.println(Arrays.toString(payload));
答案 1 :(得分:3)
如果确实需要快速,那么最好的解决方案是将短路放入ByteBuffer
,并且字节顺序很小。然后,使用FileChannel
在一个操作中编写ByteBuffer。
使用ByteBuffer
方法设置.order()
的字节顺序。