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

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

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

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

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

您点的单线程读,多线程处理
https://gist.github.com/cbdyzj/5a9612a00db7fdcf1b9fc314b3c58c70
gBurnX
2021-08-28 14:07:36 +08:00
什么年代了还自己写 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