Spring-如何更快地读取RestTemplate的响应

时间:2018-10-07 00:14:48

标签: spring inputstream resttemplate

背景

读取RestTemplate响应的inputstream并保存到磁盘。

restTemplate.execute( new URI(url), method, requestCallback, responseExtractor);

responseExtrator

    ResponseExtractor<StreamResponseWrapper> responseExtractor = response -> {
            ...
            Files.copy(response.getBody(), path);
            ...
    }

问题

响应是一个 150MB 文件,大约需要1分钟。

我的调查

我使用缓冲的输入流将“ Files.copy(response.getBody(),路径)”替换为自己的实现,但发现无论缓冲大小有多大,它都会读取最大 8192 * 2 个字节。

我检查了 response.getBody(),它是几个输入流的包装,我想其中一个具有较小的缓冲区?

            BufferedInputStream bis = new BufferedInputStream(response.getBody(), 8192*8);
        try {
            int read=0;
            byte[] b = new byte[8192*8];
            while ( (read = bis.read(b)) >= 0){
                LOG.info("read " + read);  //max 8192*2

0 个答案:

没有答案