V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Moonkin
V2EX  ›  问与答

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

  •  
  •   Moonkin · 2020-05-12 12:19:29 +08:00 · 1146 次点击
    这是一个创建于 1665 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请问 java nio2 里面,读数据的话,completeHandler 是什么时候触发的?

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

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

    ps. JAVA linux 上 aio 也是基于 nio 实现的,linux 没有支持 aio
    helloSpringBoot
        2
    helloSpringBoot  
       2020-05-12 12:57:02 +08:00
    参考这篇文章,可以看下里面的 AioServer 怎么读的数据: https://juejin.im/post/5d3b05ad6fb9a07ed6581a0a
    Moonkin
        3
    Moonkin  
    OP
       2020-05-12 13:21:25 +08:00
    @helloSpringBoot 谢谢大佬 了解了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5855 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:00 · PVG 11:00 · LAX 19:00 · JFK 22:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.