背景
读取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