最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java接收文件流+response.body()調(diào)用兩次問(wèn)題(分別接收文件和對(duì)象)

 更新時(shí)間:2023年06月17日 14:48:48   作者:dalter  
這篇文章主要介紹了java接收文件流+response.body()調(diào)用兩次問(wèn)題(分別接收文件和對(duì)象),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java接收文件流+response.body()調(diào)用兩次

正常返回的數(shù)據(jù)是流 可以讀成圖片 但是異常的時(shí)候返回的是對(duì)象(字段) 這種時(shí)候需要判斷情況,就是說(shuō)分別獲取流文件的對(duì)象信息,而Response.body()這個(gè)只能用一次

所以推出這個(gè)解決方法

import okhttp3.*;
import okio.Buffer;
import okio.BufferedSource;
import java.io.*;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;    
public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        Request request = new Request.Builder()
                .url("http://127.0.0.1:8080/test/duizhang")
                .build();
        Response response = client.newCall(request).execute();
        ResponseBody body = response.body();
        BufferedSource source = body.source();
        source.request(Long.MAX_VALUE);
        Buffer buffer = source.buffer();
        String responseBodyString = buffer.clone().readString(Charset.forName("UTF-8"));
        System.out.println(responseBodyString);
        InputStream is = body.byteStream();
        byte[] bs = new byte[1024];
        // 讀取到的數(shù)據(jù)長(zhǎng)度
        int len;
        // 輸出的文件流(后綴名)
        File sf=new File("F://文件接收");
        if(!sf.exists()){
            sf.mkdirs();
        }
        // 新的圖片文件名 = 編號(hào) +"."圖片擴(kuò)展名
        OutputStream os = new FileOutputStream(sf.getPath()+"\\"+sf.getName());
        // 開(kāi)始讀取
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len);
        }
        // 完畢,關(guān)閉所有鏈接
        os.close();
        is.close();
        System.out.println("程序執(zhí)行完畢");
    }

關(guān)于OKHttpUtils,連續(xù)調(diào)用Response.body()報(bào)錯(cuò)io.closed的坑

當(dāng)我調(diào)用

inputStream = response.body().byteStream();時(shí)報(bào)錯(cuò)io異常的closed錯(cuò)誤

經(jīng)過(guò)問(wèn)題排查,發(fā)現(xiàn)我在工具類(lèi)里面寫(xiě)了

log.info("請(qǐng)求返回內(nèi)容為{}",response.body().string());

這里雖然調(diào)用的是string()方法,但是由于body()調(diào)用一次就會(huì)導(dǎo)致后面獲取輸入流時(shí)流關(guān)閉,即okhttp3只允許調(diào)用response.body()一次,因?yàn)轫憫?yīng)體可能很大,所以O(shè)kHttp沒(méi)有存入響應(yīng)體到內(nèi)存,只是作為流從網(wǎng)絡(luò)中讀取。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

寿阳县| 犍为县| 迭部县| 右玉县| 烟台市| 内江市| 彭州市| 定陶县| 平阴县| 古交市| 阿瓦提县| 万荣县| 平顺县| 东港市| 旅游| 碌曲县| 咸宁市| 乡宁县| 景宁| 溆浦县| 垣曲县| 临桂县| 临西县| 罗定市| 海城市| 德阳市| 曲周县| 襄城县| 大理市| 庆安县| 马尔康县| 姜堰市| 双流县| 阳高县| 南平市| 喀喇| 溧水县| 沈丘县| 白水县| 威远县| 册亨县|