我正在使用这样的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]给出其值后,我打印缓冲区[0] .get(0),然后在缓冲区[1]给出其值后,我再次打印缓冲区[0] .get(0),但是价值已经改变了。 它正在处理每个前缓冲区[0],缓冲区[1]中的每个新缓冲区[i]的值... 我不明白为什么会这样?
答案 0 :(得分:1)
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);
}
答案 1 :(得分:0)
这是JavaDOC中所述的内容
public static FloatBuffer wrap(float [] array)
Wraps a float array into a buffer.
The new buffer will be backed by the given float array; that is, **modifications to the buffer will cause the array to be modified and vice versa.** The new buffer's capacity and limit will be array.length, its position will be zero, and its mark will be undefined. Its backing array will be the given array, and its array offset will be zero.
Parameters:
array - The array that will back this buffer
Returns:
The new float buffer