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

2021 年 8 月 27 日
 teliang
各位大佬,现在有个场景是这样的:
我本地建立一个 Socket 连接到服务器,OutputStream.write 和 flush 给服务器发送数据,等待服务响应然后读取数据。

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

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

跪求各位大佬指教
2178 次点击
所在节点    Java
9 条回复
AoEiuV020
2021 年 8 月 27 日
你需要的可能是 nio,
Ariver
2021 年 8 月 27 日
2021 年了,用 netty 写吧。
如果不用的话就是写一个死循环
AoEiuV020
2021 年 8 月 27 日
不过你都提到线程池了,bio 正常做法就是单独一个线程循环读数据,读到了再处理,没读到就一直等着,这也不需要什么通知,
teliang
2021 年 8 月 27 日
@AoEiuV020 有道理,我试试 nio
kaneg
2021 年 8 月 27 日
直接调 read ()方法啊,它会自己阻塞直到有数据才返回。
darkengine
2021 年 8 月 27 日
用 netty 吧
lululau
2021 年 8 月 27 日
nio 是要你去 polling 的吧,楼主要的应该是 aio 吧
Cbdy
2021 年 8 月 27 日
这点小需求有必要上框架吗?

您点的单线程读,多线程处理
https://gist.github.com/cbdyzj/5a9612a00db7fdcf1b9fc314b3c58c70
gBurnX
2021 年 8 月 28 日
什么年代了还自己写 socket...

直接 pb + gprc 一步到位不好嘛?

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

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

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

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

© 2021 V2EX