关一Socket得到的InputStream,read方法最后一直阻塞的问题
关一Socket得到的InputStream,read方法最后一直阻塞的问题
jimmywu911 发表于3年前
关一Socket得到的InputStream,read方法最后一直阻塞的问题
  • 发表于 3年前
  • 阅读 9286
  • 收藏 4
  • 点赞 0
  • 评论 2

标题:腾讯云 新注册用户域名抢购1元起>>>   

今天在尝试使用protobuf在服务端和android进行数据转递和解析时遇到一个小问题,这里记录一下。大概的场景是pc与android使用socket通信,pc为服务端,android向服务端发送请求后,服务端将protobuf对象返回给android端。android端得到InputStream后转换为byte[]再转换为protobuf对象。出现的问题就是InputStream在转换为byte[]部是发生阻塞,不能成功。

socket client端在接收到服务端的InputStream后,要将其转换为byte[],通常使用的方法大致如下:

public static byte[] toByteArray(InputStream input) throws IOException {

  ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[1024];
        int rc = 0;
        while ((rc = input.read(buff, 0, 1024)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        byte[] bytes = swapStream.toByteArray();
        return bytes; 
}



但是,如果一不注意,就会发现在input.read()读到流的结尾后,线程一真阻塞在这里,也就是一直在等着再有新数据读。这是因为socket服务端的OutputStream并没有关闭,所以这里并不认为流已经结束。这里只要服务端输出流在flush()之后正确关闭即可。


共有 人打赏支持
粉丝 5
博文 8
码字总数 8529
评论 (2)
雷毅
不错。以前遇到过同样问题
push_back0
问题已解决,非常感谢83
×
jimmywu911
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: