我正在创建一个带for循环的FloatBuffers数组,如下所示:

FloatBuffer[] buffer = new FloatBuffer[sizebuffer];

float[] farray = new float[sizeArray];

for(int i=0;i<sizebuffer;i++){
    for(int j=0;j<sizeArray;j++){

     farray[j]= I get the float values from other buffer....
    }

    buffer[i]= FloatBuffer.wrap(farray);  (*)

}


但是由于某种原因,每次执行此行(*)时,它都会更改FloatBuffer数组(“缓冲区”)每一行的值。例如,在给buffer [0]赋值之后,我打印了buffer [0] .get(0),然后在给了buffer [1]赋值之后,我再次打印了buffer [0] .get(0),但是该值已更改。
它在每个先前缓冲区[0],缓冲区[1]上处理每个新缓冲区[i]的值。
我不明白为什么会这样?

最佳答案

FloatBuffer.wrap方法有效地保留传递给它的数组。因此,所有缓冲区都将以您在for循环中最后处理的任何值结束。避免此问题的一种简单但相对昂贵的方法是在将数组包装在每个缓冲区中之前先System.arraycopy数组。

老实说,在从外部源读取浮点值时,应该仅使用put系列方法之一将浮点值设置为缓冲区。

for(int i=0;i<sizebuffer;i++){
    for(int j=0;j<sizeArray;j++){
        farray[j]= some value from other buffer....
    }

    buffer[i]= FloatBuffer.allocate(farray.length);
    buffer[i].put(farray);
}

09-25 15:31