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 至关重要。