V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
teliang
V2EX  ›  Java

小白不懂就问, Java InputStream 如何在接收数据时收到事件通知

  •  
  •   teliang · 96 天前 · 1070 次点击
    这是一个创建于 96 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位大佬,现在有个场景是这样的:
    我本地建立一个 Socket 连接到服务器,OutputStream.write 和 flush 给服务器发送数据,等待服务响应然后读取数据。

    问题:
    我 flush 后直接 InputStream.available()返回 0,需要 sleep 零点几秒才能拿到数据,并发请求的时候都 sleep 感觉不太好

    请问:
    InputStream 有没有事件通知呢,比如服务器返回数据后有个事件通知,我用线程池处理数据

    跪求各位大佬指教
    第 1 条附言  ·  95 天前
    5 楼说的对,我直接 read 就行,是我傻了,nio 我还不太会用,等我看看书再试试
    9 条回复    2021-08-28 14:07:36 +08:00
    AoEiuV020
        1
    AoEiuV020   96 天前
    你需要的可能是 nio,
    Ariver
        2
    Ariver   96 天前 via iPhone
    2021 年了,用 netty 写吧。
    如果不用的话就是写一个死循环
    AoEiuV020
        3
    AoEiuV020   96 天前 via Android   ❤️ 1
    不过你都提到线程池了,bio 正常做法就是单独一个线程循环读数据,读到了再处理,没读到就一直等着,这也不需要什么通知,
    teliang
        4
    teliang   96 天前
    @AoEiuV020 有道理,我试试 nio
    kaneg
        5
    kaneg   96 天前 via iPhone   ❤️ 1
    直接调 read ()方法啊,它会自己阻塞直到有数据才返回。
    darkengine
        6
    darkengine   96 天前
    用 netty 吧
    lululau
        7
    lululau   95 天前
    nio 是要你去 polling 的吧,楼主要的应该是 aio 吧
    Cbdy
        8
    Cbdy   95 天前   ❤️ 1
    这点小需求有必要上框架吗?

    您点的单线程读,多线程处理
    gBurnX
        9
    gBurnX   95 天前
    什么年代了还自己写 socket...

    直接 pb + gprc 一步到位不好嘛?
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2633 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    ♥ Do have faith in what you're doing.