Java如何使用紧凑方法清除缓冲区?
如果要清除缓冲区但要将未读取的数据保留在缓冲区中,则需要使用compact()缓冲区的方法。该compact()方法会将未读数据复制到缓冲区的开头,并在未读数据之后立即设置位置。在limit本身仍然有值等于缓冲能力。缓冲区将准备好再次写入,而不会覆盖未读取的数据。
package org.nhooo.example.io;
import java.nio.CharBuffer;
public class BufferCompact {
public static void main(String[] args) throws Exception {
CharBuffer buffer = CharBuffer.allocate(64);
buffer.put("Let's write some Java code! ");
System.out.println("Position: " + buffer.position());
System.out.println("Limit : " + buffer.limit());
//从缓冲区读取10个字符。
buffer.flip();
for (int i = 0; i < 10; i++) {
System.out.print(buffer.get());
}
System.out.println("");
System.out.println("Position: " + buffer.position());
System.out.println("Limit : " + buffer.limit());
//使用compact()方法清除缓冲区。
buffer.compact();
System.out.println("Position: " + buffer.position());
System.out.println("Limit : " + buffer.limit());
//写入和读取更多数据。
buffer.put("Add some more data.");
buffer.flip();
while (buffer.hasRemaining()) {
System.out.print(buffer.get());
}
}
}上面的代码片段的输出是:
Position: 28 Limit : 64 Let's writ Position: 10 Limit : 28 Position: 18 Limit : 64 e some Java code! Add some more data.
热门推荐
1 如何训练狗狗不叫
2 训练狗狗不叫
3 训练狗狗随行
4 怎么训练狗狗不叫
7 训练比熊狗狗教程
10 上海狗狗训练
11 怎么训练狗狗上厕所
12 训练狗狗趴下
13 狗狗服从训练
14 训练狗狗拒食
15 训练狗狗笑
16 训练狗狗大便
17 训练狗狗立
18 训练狗狗捡东西