请问 Java nio2(AIO)里面,读数据的话, completeHandler 是什么时候触发的?

2020-05-12 12:19:29 +08:00
 Moonkin
请问 java nio2 里面,读数据的话,completeHandler 是什么时候触发的?

都说是读完成的时候,那么问题来了,如果是 socket,怎么判断读完成?是读到一个换行符\n 来触发一次读完成吗?还是说有什么专门的协议来表示一块数据传输完成?

ps:据我调查,socketChannel 和 Handler 都没法预先知道要读取多少数据。如果是 nio,需要缓存输入数据,直到读到完整的一条,再处理。那 aio 呢?这个 completeHandler 是像 nio 一样随缘触发的吗?
996 次点击
所在节点    问与答
3 条回复
helloSpringBoot
2020-05-12 12:54:16 +08:00
tcp 是流式协议,需要自己判断数据是不是读取完成了,在这点上 aio 和 nio 是没区别的

ps. JAVA linux 上 aio 也是基于 nio 实现的,linux 没有支持 aio
helloSpringBoot
2020-05-12 12:57:02 +08:00
参考这篇文章,可以看下里面的 AioServer 怎么读的数据: https://juejin.im/post/5d3b05ad6fb9a07ed6581a0a
Moonkin
2020-05-12 13:21:25 +08:00
@helloSpringBoot 谢谢大佬 了解了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670871

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX