ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
<!-- Fetching Primitives --> ## 基本类型获取 虽然 **ByteBuffer** 只包含字节,但它包含了一些方法,用于从其所包含的字节中生成各种不同的基本类型数据。代码示例: ```java // newio/GetData.java // (c)2017 MindView LLC: see Copyright.txt // 我们无法保证该代码是否适用于其他用途。 // 访问 http://OnJava8.com 了解更多本书信息。 // 从 ByteBuffer 中获取不同的数据展示 import java.nio.*; public class GetData { private static final int BSIZE = 1024; public static void main(String[] args) { ByteBuffer bb = ByteBuffer.allocate(BSIZE); // 自动分配 0 到 ByteBuffer: int i = 0; while(i++ < bb.limit()) if(bb.get() != 0) System.out.println("nonzero"); System.out.println("i = " + i); bb.rewind(); // 保存和读取 char 数组: bb.asCharBuffer().put("Howdy!"); char c; while((c = bb.getChar()) != 0) System.out.print(c + " "); System.out.println(); bb.rewind(); // 保存和读取 short: bb.asShortBuffer().put((short)471142); System.out.println(bb.getShort()); bb.rewind(); // 保存和读取 int: bb.asIntBuffer().put(99471142); System.out.println(bb.getInt()); bb.rewind(); // 保存和读取 long: bb.asLongBuffer().put(99471142); System.out.println(bb.getLong()); bb.rewind(); // 保存和读取 float: bb.asFloatBuffer().put(99471142); System.out.println(bb.getFloat()); bb.rewind(); // 保存和读取 double: bb.asDoubleBuffer().put(99471142); System.out.println(bb.getDouble()); bb.rewind(); } } ``` 输出结果: ``` i = 1025 H o w d y ! 12390 99471142 99471142 9.9471144E7 9.9471142E7 ``` 在分配 **ByteBuffer** 之后,我们检查并确认它的 1,024 元素被初始化为 0。(截至到达 `limit()` 结果的位置)。 将基本类型数据插入 **ByteBuffer** 的最简单方法就是使用 `asCharBuffer()`、`asShortBuffer()` 等方法获取该缓冲区适当的“视图”(View),然后调用该“视图”的 `put()` 方法。 这是针对每种基本数据类型执行的。其中唯一有点奇怪的是 **ShortBuffer** 的 `put()`,它需要类型强制转换。其他视图缓冲区不需要在其 `put()` 方法中进行转换。