Java 中的 DoubleBuffer array() 方法及示例

2025 年 1 月 7 日 | 阅读 3 分钟

java.nio.DoubleBuffer 具有 array() 方法。通过 DoubleBuffer 类返回支持此缓冲区的 double 数组。对此缓冲区的更改也将改变返回数组的内容。调用此函数之前,请调用 hasArray() 方法以确保此缓冲区具有可用的底层数组。

由于 flip() 函数精确地为后续操作设置了限制,因此对于从写入模式转换为读取模式至关重要。当存在底层数组时,缓冲区直接访问底层存储的能力也可能很有用,但这也需要谨慎处理,特别是当数组大小与缓冲区中有效元素的数量不同时。

语法

返回值: 此函数返回支持此缓冲区的数组。

异常: 如果此缓冲区有底层数组但它是只读的,此函数将抛出 ReadOnlyBufferException。

示例 1

该方法说明了其中一个的变化如何在另一个中反映出来,表明缓冲区与其底层数组之间的同步。但是,由于这些可能没有显式填充有效值,因此在访问超出缓冲区当前限制的数组元素时必须加以考虑。接下来,使用 flip() 方法将 limit 设置为当前 position(表示已添加了多少项),并将 position 重置为零,这将缓冲区准备好进行读取。

实施

文件名: DoubleArrayExample1.java

输出

 
The elements in the array: 
11.1
22.2
33.3
44.4
0.0
0.0   

示例 2

该代码演示了如何在 Java 中使用 DoubleBuffer 对象,这些对象是可以处理双精度浮点值的缓冲区。通过 array() 访问并打印这些缓冲区的底层数组,以显示内部存储。此外,该代码通过调用 asReadOnlyBuffer() 方法生成 DoubleBuffer 的只读视图,以防止修改。访问此只读缓冲区的底层数组会导致 ReadOnlyBufferException,这表明只读缓冲区强制执行了不可变性。最后,代码处理了 IllegalArgumentException 和 ReadOnlyBufferException 异常,以说明与缓冲区操作相关的错误场景。

实施

文件名: DoubleBufferExample2.java

输出

 
The DoubleBuffer is given by : [9.5600004196167, 0.0, 7.610000133514404, 4.610000133514404, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
The DoubleBuffer doublebuff1 is given by : [0.0, 2.359999895095825, 5.389999866485596, 0.0, 0.0]
The ReadOnlyBuffer DoubleBuffer is given by : 9.5600004196167, 0.0, 7.610000133514404, 4.610000133514404, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Trying to get the array from ReadOnly for editing
The Exception thrown is: java.nio.ReadOnlyBufferException