如何在 Java 中创建 ByteBuffer

简介: 【8月更文挑战第22天】

ByteBuffer 是 Java NIO(非阻塞 I/O)包中的一个重要类。它表示一个字节缓冲区,可以用来存储和操作二进制数据。ByteBuffer 可以通过多种方式创建,包括:

1. 使用 allocate() 方法

allocate() 方法创建一个新的 ByteBuffer,其容量等于指定的字节数。

ByteBuffer buffer = ByteBuffer.allocate(1024);

2. 使用 allocateDirect() 方法

allocateDirect() 方法创建一个新的 ByteBuffer,其底层存储器直接分配在本地内存中,绕过 Java 堆。这可以提高某些操作的性能,例如直接 I/O 操作。

ByteBuffer buffer = ByteBuffer.allocateDirect(1024);

3. 使用 wrap() 方法

wrap() 方法创建一个新的 ByteBuffer,该 ByteBuffer 包装一个现有的 byte 数组或字节序列。

byte[] bytes = {
    1, 2, 3, 4 };
ByteBuffer buffer = ByteBuffer.wrap(bytes);

4. 使用 from() 方法(Java 9 及更高版本)

from() 方法创建一个新的 ByteBuffer,该 ByteBuffer 从指定的 ByteStream 或 CharBuffer 读取数据。

InputStream inputStream = ...;
ByteBuffer buffer = ByteBuffer.from(inputStream);

5. 使用 order() 方法(Java NIO 2 及更高版本)

order() 方法创建一个新的 ByteBuffer,该 ByteBuffer 具有指定的字节顺序。字节顺序指定多字节值(例如 int 或 long)在 ByteBuffer 中存储和读取的方式。

ByteBuffer buffer = ByteBuffer.allocate(1024).order(ByteOrder.LITTLE_ENDIAN);

示例

以下示例演示如何使用 allocate() 方法创建 ByteBuffer:

// 创建一个容量为 1024 字节的新 ByteBuffer
ByteBuffer buffer = ByteBuffer.allocate(1024);

// 向缓冲区写入一些数据
buffer.put((byte) 1);
buffer.put((byte) 2);
buffer.put((byte) 3);

// 重置缓冲区的 position 为 0,以便从头开始读取
buffer.rewind();

// 读取缓冲区中的数据
while (buffer.hasRemaining()) {
   
    byte b = buffer.get();
    System.out.println(b);
}

结论

ByteBuffer 是 Java NIO 中一个重要的类,用于存储和操作二进制数据。它可以通过多种方式创建,包括使用 allocate()allocateDirect()wrap()from() 方法。了解如何创建 ByteBuffer对于有效使用 Java NIO 至关重要。

目录
相关文章
|
3月前
|
存储 Java
如何在 Java 中写入和读取 ByteBuffer
【8月更文挑战第22天】
104 0
|
Java Maven
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J [duplicate]
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J [duplicate]
|
存储 缓存 Java
|
Java 容器
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(下)
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!
155 0
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(下)
|
存储 Java API
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(上)
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!
142 0
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(上)
|
Java
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(下)
NIO中的Buffer用于和NIO Channel交互。 数据是从Channel读入Buffer,从Buffer写入Channel。
205 0
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(下)
|
存储 Java API
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(上)
NIO中的Buffer用于和NIO Channel交互。 数据是从Channel读入Buffer,从Buffer写入Channel。
577 0
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(上)
|
网络协议 Java
【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
186 0