什么这样能正常发送信息呢
来源:8-6 服务器端实现(最终回合)

qq_慕码人6451904
2019-11-06
老师,这里调用write是异步调用,不会等待write的执行结果直接返回,那么下一步直接执行buffer.clear()应该会清空buffer吧,也就是说清空有可能在write真正执行前,这里的buffer应该都是同一个引用,但是为什么却能正常发送信息呢?
写回答
1回答
-
Stannum
2020-10-01
同学好~之前遗漏了你的问题,向你致歉
这个问题很好。你提出的这一行是代码中要进一步优化的部分。这个clear()的名字给很多人造成误解,以为它会真的清空buffer中的数据。其实不是的。clear()函数(以及其他几个buffer类的操作函数)其实只是在操作buffer的几个指针而已。clear()会将position指针退回到0位置,而把limit指针移动到capacity指针的位置。所以异步写入时仍然能够从buffer的起始位置将数据写入channel。我们在后续更新时会为大家优化这部分代码。00
相似问题