本文共 1393 字,大约阅读时间需要 4 分钟。
在纯Java中,无法神奇地假设一种类型可以变成另一种类型。 顺便说一句,您可以使用Unsafe在HotSpot中执行此操作,但我不认为您可以在Android中使用,这可能是最好的。
您可以通过使用具有本机字节顺序的直接ByteBuffer来加快转换速度。 这样可以最大程度地减少开销,但在Android中不如在HotSpot中快(因为后者可以将其转换为固有方法)
我会花多长时间估算一下
// or use a MappedByteBuffer from a file
ByteBuffer bb = ByteBuffer.allocateDirect(3200).order(ByteOrder.nativeOrder());
while(bb.remaining() > 0) {
float f= bb.getFloat();
}
注意:这不会运行很长时间,甚至无法与本机代码绑定。
ByteBuffer bb = ByteBuffer.allocateDirect(3200).order(ByteOrder.nativeOrder());
for (int i = 0; i < 12; i++) {
long start = System.nanoTime();
bb.clear(); // simulate we have 3200 bytes to read.
int count = 0;
while (bb.remaining() > 0) {
float f = bb.getFloat();
count++;
}
long time = System.nanoTime() - start;
System.out.printf("Took %,d micro-seconds to read %,d float values%n", time / 1000, count);
}
在HotSpot Java 7上打印
Took 960 micro-seconds to read 800 float values
Took 141 micro-seconds to read 800 float values
Took 99 micro-seconds to read 800 float values
Took 101 micro-seconds to read 800 float values
Took 100 micro-seconds to read 800 float values
Took 102 micro-seconds to read 800 float values
Took 115 micro-seconds to read 800 float values
Took 127 micro-seconds to read 800 float values
Took 108 micro-seconds to read 800 float values
Took 79 micro-seconds to read 800 float values
Took 78 micro-seconds to read 800 float values
Took 79 micro-seconds to read 800 float values
转载地址:https://blog.csdn.net/weixin_34007963/article/details/114451849 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!