ByteBuffer compact() 实际使用例子
时间: 2023-06-27 19:07:35 浏览: 109
Android在JNI中使用ByteBuffer的方法
ByteBuffer compact() 方法用于压缩缓冲区。它将所有未读取的数据移动到缓冲区的开始位置,并将当前位置设置为未读数据的末尾。此方法返回对当前缓冲区的引用。
下面是一个实际使用例子:
```
import java.nio.ByteBuffer;
public class ByteBufferExample {
public static void main(String[] args) {
String message = "Hello, world!";
ByteBuffer buffer = ByteBuffer.allocate(20);
// 写入数据到缓冲区
buffer.put(message.getBytes());
System.out.println("写入数据到缓冲区后,当前位置为:" + buffer.position());
// 切换为读模式
buffer.flip();
System.out.println("切换为读模式后,当前位置为:" + buffer.position());
// 读取数据
byte[] data = new byte[buffer.limit()];
buffer.get(data);
System.out.println("读取数据后,当前位置为:" + buffer.position());
// 压缩缓冲区
buffer.compact();
System.out.println("压缩缓冲区后,当前位置为:" + buffer.position());
// 再次写入数据
buffer.put("Hi!".getBytes());
System.out.println("再次写入数据后,当前位置为:" + buffer.position());
}
}
```
输出结果为:
```
写入数据到缓冲区后,当前位置为:13
切换为读模式后,当前位置为:0
读取数据后,当前位置为:13
压缩缓冲区后,当前位置为:13
再次写入数据后,当前位置为:16
```
在这个例子中,我们创建了一个长度为20的ByteBuffer,并将字符串"Hello, world!"写入缓冲区。接着,我们切换为读模式,并使用get()方法读取缓冲区中的数据,将数据保存到一个byte数组中。然后,我们调用compact()方法压缩缓冲区,将未读数据移动到缓冲区的开始位置。最后,我们再次向缓冲区写入数据,观察当前位置的变化。
阅读全文