客户端程序里的buffer.flip()是不是用错了?
来源:8-7 客户端实现

慕田峪2263497
2020-02-17
在下面的代码注释中,前面的代码是不是应该使用buffer.clear()?
buffer.flip()不是使buffer变成读模式吗?而下边的clientChannel.read(buffer)是把通道里的数据写入buffer,所以,buffer应该调用clear方法使其变成写模式吧?
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String input = consoleReader.readLine();
byte[] inputBytes = input.getBytes();
ByteBuffer buffer = ByteBuffer.wrap(inputBytes);
Future<Integer> writeResult = clientChannel.write(buffer);
writeResult.get();
buffer.flip();//这里是不是应该用buffer.clear()?
Future<Integer> readResult = clientChannel.read(buffer);
readResult.get();
String echo = new String(buffer.array());
buffer.clear();
System.out.println(echo);
}
写回答
1回答
-
Stannum
2020-04-12
同学你好~多谢你提出这个问题!我的讲解在这里是不准确的,一般来讲,将buffer从读模式转为写模式确实应该调用clear(),而不是flip(),我之后会在课程中加上一个注解来修改这个讲解中的问题
不过呢,在我们这个AIO tutorial的演示中,不管调用flip还是clear,buffer的position/limit/capacity指针都会处于相同的位置,因为这里的buffer从创建之初,它的limit和capacity就是指向同一个位置的。所以从效果上来看,调用flip和clear的效果是一样的。
012022-08-13
相似问题