如何使用Java I/O加快下载速度



我对使用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

结果是大量的重定向导致下载速度受到限制。

最新更新