我有多个要写入磁盘的多头数组.最有效的磁盘I / O功能采用字节数组,例如:
FileOutputStream.write(byte[] b, int offset, int length)
…所以我想首先将long []转换为byte [](每个long 8个字节).我正在努力寻找一种干净的方法来做到这一点.
似乎不允许直接类型转换:
ConversionTest.java:6: inconvertible types
found : long[]
required: byte[]
byte[] byteArray = (byte[]) longArray;
^
通过遍历数组很容易进行转换,例如:
ByteBuffer bytes = ByteBuffer.allocate(longArray.length * (Long.SIZE/8));
for( long l: longArray )
{
bytes.putLong( l );
}
byte[] byteArray = bytes.array();
…但是,这似乎远比简单地将long []视为一系列字节有效.
有趣的是,在读取文件时,很容易使用Buffers将字节[]转换为long:
LongBuffer longs = ByteBuffer.wrap(byteArray).asLongBuffer();
…但是我似乎找不到找到相反方向的功能.
我知道从长到字节转换时有字节顺序的注意事项,但我相信我已经解决了这些问题:我正在使用上面显示的Buffer框架,无论本机字节顺序如何,该框架默认为big endian.