gpt4 book ai didi

Java:有效地将长整型数组转换为字节数组

转载 作者:行者123 更新时间:2023-11-30 08:13:33 25 4
gpt4 key购买 nike

我有一个 longs 数组,我想写入磁盘。最有效的磁盘 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[] 简单地视为一系列字节有效。

有趣的是,当读取文件时,很容易使用缓冲区将byte[]“转换”为long:

LongBuffer longs = ByteBuffer.wrap(byteArray).asLongBuffer();

...但我似乎找不到任何相反方向的功能。

我知道从 long 转换为 byte 时需要考虑字节序,但我相信我已经解决了这些问题:我正在使用上面显示的 Buffer 框架,无论 native 字节顺序如何,默认为大端。

最佳答案

不,没有简单的方法可以将 long[] 转换为 byte[]

您最好的选择可能是用 BufferedOutputStream 包装您的 FileOutputStream,然后为每个 long 写出单独的 byte(使用按位运算符)。

另一种选择是创建一个 ByteBuffer 并将您的 long 值放入 ByteBuffer,然后将其写入 FileChannel。这会为您处理字节序转换,但会使缓冲更加复杂。

关于Java:有效地将长整型数组转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com