-1

搜索会产生许多关于如何将 int 转换为 byte[] 的问题。我有一个带有关键循环的项目,它将长 int [] 写入 FileOutputStream。FileOutputStream 需要一个 byte[] 来写入。我可以暴力破解不同的方法;我正在寻找一种将 int[] 直接发送到 FileOutputStream 的方法或将 int[] 转换为 byte[] 的最快方法 - 类似于包装缓冲区。我看到了包装 byte[] 以转换为 int[] 和 float[] 的方法......但没有其他方式(从 int[] 到 byte[])。谢谢。

更新:在证明需要之前,仍然希望避免内存映射 I/O 的复杂性(或目前正在试验)。下面的评论促使我考虑创建一个 ByteBuffer,将其包装在一个 IntBuffer 中,将 int 写入 IntBuffer,然后从 ByteBuffer 中提取一个 byte[] 以发送到 FileOutputStream。显而易见的替代方法是直接使用 byte[],这需要我将数据作为字节而不是整数来操作,我可以这样做 - 但与 byte[]/ByteBuffer 相比,它的效率高多少(如果有的话) /IntBuffer 包装方案?

4

2 回答 2

2

您的瓶颈很可能是您的磁盘 IO,因此您在 CPU 中的操作无关紧要。我会确保您尝试解决一个会对您的应用程序产生影响的问题。

如果您有一个快速的磁盘子系统并且您的数据突发很短,那么您的 CPU 可能很重要,并且进行转换的最快方法是首先避免执行转换,即根本不使用 a byte[]。一个示例,如果 OpenHFT/Java Chronicle 这需要一个int值并将其作为 32 位值直接写入内存映射文件内存区域。这意味着每次写入都包含一条机器代码指令,平均耗时约 1.5 ns。

于 2013-10-27T06:45:15.083 回答
0

试试 ObjectOutputStream.writeObject(intArray)。您可以稍后使用 ObjectIntputStream.readObject 阅读它

于 2013-10-27T07:01:20.750 回答