为了账号安全,请及时绑定邮箱和手机立即绑定

java socket read 阻塞问题???

java socket read 阻塞问题???

婷婷同学_ 2019-03-20 13:19:02
自己写了一个小的服务器代码,从socket中读取数据时,用读一次的方式就不会阻塞,而放在while里面就会阻塞为什么呢?如果read是阻塞的,那么即使是读一次也因该会被阻塞啊?代码如下:in.read(buffer);for(byte b : buffer)    request.append((char)b);这是读一次的方法,不会阻塞。   while((len = in.read(buffer)) != -1){        for(byte b : buffer){            request.append((char)b);    }这是while循环的方法,会被阻塞。求解啊!!
查看完整描述

4 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

下面是Java API文档对read方法的解释:

This method blocks until input data is available, end of file is detected, or an exception is thrown.

意思就是当读不到新数据时read会阻塞。

放在while里面read时,客户端发来数据,那么read就不阻塞,会把客户端发来的数据读到数组里,循环到第二次客户端没有再次发数据给服务器,那么服务器读取不了就会一直等客户端的数据,这样就会阻塞。


查看完整回答
反对 回复 2019-04-18
?
千巷猫影

TA贡献1829条经验 获得超7个赞

本来就回阻塞,建议把服务器的放到多线程里面去,阻塞后直接创建一个线程把读取到的数据放到线程里面。让线程去处理,这样可以请求多个。


查看完整回答
反对 回复 2019-04-18
  • 4 回答
  • 0 关注
  • 639 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号