我正在尝试从 Kaltura 下载文件(.mp4),文件超过 100mb,下面的代码需要花费大量时间来下载。
还有其他方法可以改进吗?
try {
URL url = new URL("https://www.kaltura.com/p/....");
InputStream in = new BufferedInputStream(url.openStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[8192];
int n = 0;
while (-1 != (n = in.read(buf)))
{
out.write(buf);
}
out.close();
in.close();
res.setContentType("application/octet-stream");
res.setHeader("Cache-Control", "no-cache");
res.setHeader("Content-Disposition","attachment;filename=Smac_03_48.mp4 (iPad).mp4");
res.setStatus(200);
res.getOutputStream().write(out.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
最佳答案
问题是 ByteArrayOutputStream 将急剧增长,不时重新分配其大小。相反,立即输出:
try {
URL url = new URL("https://www.kaltura.com/p/....");
InputStream in = new BufferedInputStream(url.openStream());
res.setContentType("application/octet-stream");
res.setHeader("Cache-Control", "no-cache");
res.setHeader("Content-Disposition","attachment;filename=Smac_03_48.mp4 (iPad).mp4");
res.setStatus(200);
OutputStream out = res.getOutputStream();
byte[] buf = new byte[8192];
int n = 0;
while (-1 != (n = in.read(buf)))
{
out.write(buf);
}
out.flush();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
当然,浏览器重定向会更快。
关于java - 从服务器下载大文件需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50346548/