我对使用Java I/O很陌生,因为我以前从来没有过,我写了这篇文章来从www.kissanime.com下载一个。mp4文件。
目前下载速度非常非常慢(大约70-100kb/s),我想知道如何加快速度。我真的不理解字节缓冲,所以任何帮助,我将不胜感激。这可能是我的问题,我不确定。
下面是我的代码:
protected static boolean downloadFile(URL source, File dest) {
try {
URLConnection urlConn = source.openConnection();
urlConn.setConnectTimeout(1000);
urlConn.setReadTimeout(5000);
InputStream in = urlConn.getInputStream();
FileOutputStream out = new FileOutputStream(dest);
BufferedOutputStream bout = new BufferedOutputStream(out);
int fileSize = urlConn.getContentLength();
byte[] b = new byte[65536];
int bytesDownloaded = 0, len;
while ((len = in.read(b)) != -1 && bytesDownloaded < fileSize) {
bout.write(b, 0, len);
bytesDownloaded += len;
// System.out.println((double) bytesDownloaded / 1000000.0 + "mb/" + (double) fileSize / 1000000.0 + "mb");
}
bout.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
谢谢。如有任何进一步的信息,我们将根据要求提供。
我在这里找不到任何与下载媒体文件有关的问题,如果这被认为是重复的,我很抱歉。
尝试使用ioutil。toByteArray,它接受输入流并返回包含所有字节的数组,在我看来,检查常见的实用程序包(如apache-commons和guava)通常是一个好主意,看看你要做的事情是否已经完成
如果你想从InputStream中保存文件,那么使用apache-commons的下面这个方法FileUtils。copyInputStreamToFile ()
public static void copyInputStreamToFile(InputStream source,
File destination)
throws IOException
将字节从InputStream源复制到文件目标。如果到目标的目录不存在,将创建它们。如果目的地已经存在,它将被覆盖。源流关闭
如果可用,总是使用库来使用文件和IO相关的东西。还有一些其他实用方法可用& &;你可以探索。
IOUtils
FileUtils
结果是大量的重定向导致下载速度受到限制。