java - 将结构列表复制到 Java 中的 float 组

标签 java memory-management struct memcpy

在 C++ 中,如果我有一个包含 3 个 float 的结构:

 struct Vertex  
  {  
    float x;  
    float y;  
    float z;  
  }

如果我有这些 (std::vector<Vertex>) 的列表,我可以像这样使用 memcpy 将它们复制到 float[] 中:

float [] vertexBuffer = new float[m_vertices.size() * 3];  
memcpy(m_vertexBuffer, m_vertices.data(), m_vertices.size() * sizeof(Vertex));

在 Java 中是否有任何等效的方法可以让我做同样的事情?如果我有一个带有 x、y、z float 的 Java 类 VertexJava,并且这些都存储在一个 ArrayList 中,我有什么办法可以将它们的所有值复制到一个 float[] 中而无需遍历名单?

最佳答案

我认为 java 方法是在 Vertex 类中定义一个方法,该方法将返回一个 float 数组。是否有什么不能满足您的需求?

public float[] toFloatArray() {
    float[] ret = {this.x, this.y, this.z};
    return ret;
}

编辑: 这是为一个对象完成的。如果你想操作很多,也许你也有这样的静态方法:

public static float[] manyToOneArray(List<Vector> theList) {
    float[] ret = new float[theList.size() * 3];
    int i = 0;
    for (Vector v : theList) {
        ret[i++] = v.x;
        ret[i++] = v.y;
        ret[i++] = v.z;  
    } 
    return ret;
}

我对此做了一些改动,因为我对多次使用 ArrayUtils.addAll() 不是很满意。我认为它可能会带来非常低效的性能。所以,你的问题的答案是你不能以同样的方式操纵内存,不。您可以完成大致相同的事情,但控制程度不同。

关于java - 将结构列表复制到 Java 中的 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11869865/

相关文章:

java - 使用 LocationListener 的 BlackBerry 应用程序在 OS 6 上卡住

c - 我如何知道我的 mmaped 分配的范围?

iPhone:使用 UIViewController 以节省内存

在 C 中将未知长度缓冲区复制到固定大小缓冲区

c - 为什么在 32 位系统中包含一个 int64 变量时结构大小是 8 的倍数

java - Spring @Transactional 和继承

java - "do"在这里做什么? ( java )

objective-c - Apple 的 Objective-C 运行时如何在不降低性能的情况下进行多线程引用计数?

function - Matlab:在结构矩阵上应用函数

java - 我可以将当​​前的 JAXB 模型转换为其他 JAXB 模型吗?