gpt4 book ai didi

java - 为什么使用 FloatBuffer 而不是 float[]?

转载 作者:IT老高 更新时间:2023-10-28 20:41:29 24 4
gpt4 key购买 nike

我已经在我的 Android 代码中使用 FloatBuffers 有一段时间了(从一些 opengles 教程中复制了它),但我无法准确理解这个构造是什么以及为什么需要它。

例如,我在很多人的代码和 android 教程中看到的这段代码(或类似代码):

float[] vertices = ...some array...

ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder()); // use the device hardware's native byte order
FloatBuffer fb = vbb.asFloatBuffer(); // create a floating point buffer from the ByteBuffer
fb.put(vertices); // add the coordinates to the FloatBuffer
fb.position(0); // set the buffer to read the first coordinate

这似乎非常冗长和困惑,据我所知,这只是一个花哨的 float 组的包装。

问题:

  • 与任何其他类型的集合或简单的 float 组相比,这种类型的类(ByteBuffer、FloatBuffer)的理由是什么?

  • 在将 ByteBuffer 转换为 FloatBuffer 之前创建它的想法是什么?

最佳答案

主要原因是性能:ByteBuffers 和其他 NIO 类在与 native 代码交互时启用加速操作(通常通过避免将数据复制到临时缓冲区的需要)。

例如,如果您正在执行大量 OpenGL 渲染调用,这一点非常重要。

首先创建一个 ByteBuffer 的原因是您想使用 allocateDirect 调用来创建一个 direct 字节缓冲区,这得益于加速操作。然后,您可以从中创建一个共享相同内存的 FloatBuffer。由于某种原因,FloatBuffer 本身没有 allocateDirect 方法,这就是您必须通过 ByteBuffer 的原因。

关于java - 为什么使用 FloatBuffer 而不是 float[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10697161/

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