文章目录
ByteBuffer 总体介绍
ByteBuffer 是 Java NIO(New I/O)库中的一个类,用于处理字节数据。它提供了一种灵活且高效的方式来操作字节缓冲区,适用于处理大量的字节数据,例如文件 I/O、网络通信等。
ByteBuffer 的一些重要特性和用法:
-
容量(Capacity):
ByteBuffer有一个固定的容量,一旦分配,就不能更改。可以通过allocate静态方法或wrap静态方法来创建一个ByteBuffer。ByteBuffer buffer = ByteBuffer.allocate(1024); // 分配 1024 字节的缓冲区 -
位置(Position)和限制(Limit):
ByteBuffer有一个位置和限制的概念,它们用于跟踪读写的位置。position表示下一个要读写的位置,而limit表示当前位置可读写的最大位置。 -
读写操作:
ByteBuffer提供了一系列读写方法,包括get、put、read、write等。这些方法允许你从缓冲区读取数据或将数据写入缓冲区。// 写入数据到缓冲区 buffer.put((byte) 10); // 从缓冲区读取数据 byte value = buffer.get(); -
翻转(Flip): 为了从写模式切换到读模式,或者从读模式切换到写模式,可以使用
flip方法。这个方法将limit设置为当前位置,然后将position设置为 0,准备读取数据或写入数据。buffer.flip(); // 切换到读模式 -
清空(Clear):
clear方法用于清空缓冲区,将position设置为 0,limit设置为容量,准备写入数据。buffer.clear(); // 清空缓冲区,准备写入数据 -
Compact:
compact方法用于在读写模式之间移动数据。它将缓冲区中未读取的数据复制到缓冲区的开始位置,然后将position设置为未读取数据的末尾。buffer.compact(); // 在读写模式之间移动数据
ByteBuffer 的灵活性和高效性使其成为处理字节数据的强大工具,特别适用于网络编程、文件 I/O 和其他需要高性能的场景。
使用示例
put
@Test
public void put() {
ByteBuffer buffer = ByteBuffer.allocate(10);
System.out.println("buffer = " + buffer);
buffer.put((byte) 0x01);
System.out.println("buffer.toString() = " + Arrays.toString(buffer.array()));
System.out.println("buffer = " + buffer);
buffer.put(5, (byte) 42);
System.out.println("buffer.toString() = " + Arrays.toString(buffer.array()));
System.out.println("buffer = " + buffer);
}
输出:
buffer = java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]
buffer.toString() = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
buffer = java.nio.HeapByteBuffer[pos=1 lim=10 cap=10]
buffer.toString() = [1, 0, 0, 0, 0, 42, 0, 0, 0, 0]
buffer = java.nio.HeapByteBuffer[pos=1 lim=10 cap=10]
@Test
public void put2() {
ByteBuffer buffer = ByteBuffer.allocate(10);
System.out.println("buffer = " + buffer);
buffer.put(new byte[] {
0X01, 0X02 });
System.out.println("buffer = " + buffer);
System.out.println(

最低0.47元/天 解锁文章
376





