提高 bufferedinputstream 转换速度的优化
为了优化从 http 加载大文件(如图片)的性能,需要解决如下问题:
- 等待读取完成:原始代码将读取完成的数据全部缓存到内存中,导致读取时间过长。
- 阻塞读取:读取过程中,响应一直等待,无法并行处理其他任务。
- 连接未复用:未使用连接复用技术,导致每次请求都重新建立连接。
- 资源未释放:连接未释放,造成内存泄露。
解决方案:
方案 1:原始流复制
// 缓冲区越大,效率越高,但注意内存占用 byte[] buffer = new byte[1024];
方案 2:使用第三方库
ioutil.copy(bis, out);
方案 3:nio 非阻塞传输
// 缓冲区越大,效率越高 ByteBuffer byteBuffer = ByteBuffer.allocate(8192);
其他优化:
- 使用连接复用技术(如 ok-http)。
- 及时关闭资源。