java socket read 阻塞问题???

自己写了一个小的服务器代码,从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循环的方法,会被阻塞。

求解啊!!


婷婷同学_
浏览 642回答 4
4回答

白猪掌柜的

下面是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就不阻塞,会把客户端发来的数据读到数组里,循环到第二次客户端没有再次发数据给服务器,那么服务器读取不了就会一直等客户端的数据,这样就会阻塞。

千巷猫影

本来就回阻塞,建议把服务器的放到多线程里面去,阻塞后直接创建一个线程把读取到的数据放到线程里面。让线程去处理,这样可以请求多个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java