Moonkin
V2EX  ›  问与答

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

  •  
  •   Moonkin · May 12, 2020 · 1789 views
    This topic created in 2191 days ago, the information mentioned may be changed or developed.
    请问 java nio2 里面,读数据的话,completeHandler 是什么时候触发的?

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

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

    ps. JAVA linux 上 aio 也是基于 nio 实现的,linux 没有支持 aio
    helloSpringBoot
        2
    helloSpringBoot  
       May 12, 2020
    参考这篇文章,可以看下里面的 AioServer 怎么读的数据: https://juejin.im/post/5d3b05ad6fb9a07ed6581a0a
    Moonkin
        3
    Moonkin  
    OP
       May 12, 2020
    @helloSpringBoot 谢谢大佬 了解了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1330 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:14 · PVG 01:14 · LAX 10:14 · JFK 13:14
    ♥ Do have faith in what you're doing.