什么这样能正常发送信息呢

来源: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。我们在后续更新时会为大家优化这部分代码。

0
0

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程