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

如何使用Java I/O加速下载,java,io,download,Java,Io,Download,我对使用Java I/O非常陌生,因为我以前从未使用过,我写这篇文章是为了从www.kissanime.com下载一个.mp4文件 目前下载速度非常非常慢,大约为70-100kb/s,我想知道如何加快下载速度。我真的不理解字节缓冲,所以如果有任何帮助,我将不胜感激。那可能是我的问题,我不确定 这是我的密码: protected static boolean downloadFile(URL source, File dest) { try { URLConnection

我对使用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;
}
谢谢。如有要求,将提供任何进一步信息


我在这里找不到任何与下载媒体文件有关的问题,如果这被认为是重复的,我很抱歉。

尝试使用,它接受一个输入流并返回一个包含所有字节的数组,在我看来,通常最好检查常见的实用程序包,如ApacheCommons和guava,看看您试图做的事情是否还没有完成

如果您想从InputStream保存文件,那么使用ApacheCommons下面的方法

将字节从InputStream源复制到文件目标。如果目录不存在,则将创建到目标的目录。如果目标已存在,则将覆盖该目标。源流已关闭

如果可用,请始终使用库来使用文件和IO相关的内容。还有一些其他实用方法可用&您可以探索


事实证明,正是来自链接的大量重定向导致下载速度受到限制。感谢所有回答的人。

Yuo可以尝试使用更大的缓冲区,但实际上唯一会减慢此代码速度的是打印进度。您不需要根据总长度跟踪到目前为止下载的字节。下载完成后,您将获得EOS。在任何情况下,你都应该在读取之前测试总数,而不是在读取之后。我尝试了一个更大的缓冲区,但实际上没有效果。我尝试了新字节[65536],但毫无帮助。让我不带枪试试,然后再报告。删除System.out.println并不会影响下载速度。它下载前2mb的速度非常快,然后又变慢了。是的,你可能应该尝试删除println,每次迭代打印都非常昂贵……阅读我最后的评论阿拉什:我想知道:真的有问题要解决吗?如果您通过其他方式下载文件,那么下载速度会更快吗?可能是网站本身限制了下载速度。
public static void copyInputStreamToFile(InputStream source,
                     File destination)
                              throws IOException