如何加速 bufferedinputstream 的转换
本文为提高使用 bufferedinputstream 时文件转换速度提供解决方案。
原始代码存在几个问题:
方案 1:直接复制流
使用 ioutils.copy 等方法边读边写,从而避免数据缓冲到内存中:
ioutils.copy(connection.getinputstream(), response.getoutputstream());
方案 2:使用 nio
使用 nio 进行非阻塞传输,并使用更大的缓冲区提高效率:
try (ReadableByteChannel in = Channels.newChannel(new BufferedInputStream(connection.getInputStream()));
WritableByteChannel out =
Channels.newChannel(response.getOutputStream())) {
ByteBuffer byteBuffer = ByteBuffer.allocate(65536);
while (in.read(byteBuffer) != -1) {
byteBuffer.flip();
out.write(byteBuffer);
byteBuffer.clear();
}
}建议