小弟对io流很陌生,请问大佬下面的代码怎么优化?图片5Mb的时候要等8sm,怎么提高加载速度?
try {
URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
OutputStream outputStream = response.getOutputStream();
response.setContentType("image/jpg");
outputStream.write(baos.toByteArray());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
你的问题主要有这么几处:
buffer
过程中,response
一直在等待,什么也没做,可以边读边写OK-http
等库复用连接response
会等待超时,且内存会泄露方案1:
原始流复制,这里的
buffer
越大,效率越快,但是注意内存占用方案2:
使用一些三方库的COPY工具类
方案3:
使用NIO非阻塞传输,同样缓冲区越大,效率越快