要allocate()或者allocateDirect(),这是一个问题.
多年以来我一直坚持认为,因为DirectByteBuffers是OS级别的直接内存映射,所以get/put调用的执行速度比HeapByteBuffers 快.到目前为止,我从未真正有兴趣了解有关情况的具体细节.我想知道两种类型的ByteBuffer哪种更快,哪种条件更快.
我的理解是C/C++生成在特定机器架构上运行的本机代码.相反,Java和C#等语言运行在虚拟机之上,该虚拟机将本机架构抽象化.逻辑上,由于这个中间步骤,Java或C#似乎不可能匹配C++的速度,但是我被告知最新的编译器("热点")可以达到这个速度甚至超过它.
也许这更像是一个编译问题,而不是一个语言问题,但任何人都可以用简单的英语解释这些虚拟机语言之一如何比母语更好地执行?
我有一个整数数组,表示RGB图像,并希望将其转换为字节数组并将其保存到文件中.
将整数数组转换为Java中的字节数组的最佳方法是什么?
我正在开发一个Java应用程序,我需要尽快通过套接字连接从一部Android手机向另一部Android手机发送500,000个整数数组.主要的瓶颈似乎是转换整数,因此套接字可以使用它们,无论我使用ObjectOutputStreams,ByteBuffers还是低级掩码和移位转换.通过套接字将int []从一个Java应用程序发送到另一个Java应用程序的最快方法是什么?
这是迄今为止我尝试过的所有内容的代码,LG Optimus V上的基准测试我正在测试(600 MHz ARM处理器,Android 2.2).
低级掩码和移位:0.2秒
public static byte[] intToByte(int[] input)
{
byte[] output = new byte[input.length*4];
for(int i = 0; i < input.length; i++) {
output[i*4] = (byte)(input[i] & 0xFF);
output[i*4 + 1] = (byte)((input[i] & 0xFF00) >>> 8);
output[i*4 + 2] = (byte)((input[i] & 0xFF0000) >>> 16);
output[i*4 + 3] = (byte)((input[i] & 0xFF000000) >>> 24);
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
使用ByteBuffer和IntBuffer:0.75秒
public static byte[] intToByte(int[] input)
{
ByteBuffer byteBuffer = ByteBuffer.allocate(input.length * 4);
IntBuffer intBuffer …Run Code Online (Sandbox Code Playgroud)