关于OKHttpUtils,连续调用Response.body()报错io.closed的坑

当使用OkHttp进行网络请求时,调用response.body().string()会导致输入流关闭,无法再次调用byteStream()。这是因为OkHttp设计为每个响应体只能被消费一次,以避免大体积内容占用过多内存。解决办法是在处理响应内容前先复制流或者一次性读取完整内容。
摘要由CSDN通过智能技术生成

当我调用

inputStream = response.body().byteStream();时报错io异常的closed错误

经过问题排查,发现我在工具类里面写了

 log.info("请求返回内容为{}",response.body().string());

这里虽然调用的是string()方法,但是由于body()调用一次就会导致后面获取输入流时流关闭,即okhttp3只允许调用response.body()一次,因为响应体可能很大,所以OkHttp没有存入响应体到内存,只是作为流从网络中读取。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值