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

时间:2014-06-05 11:58:18

标签: java io download

我使用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;
}

感谢。任何进一步的信息将根据要求提供。

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

3 个答案:

答案 0 :(得分:0)

尝试使用IOUtils.toByteArray,它需要一个输入流并返回一个包含所有字节的数组,在我看来,检查常见的实用程序包如apache-commons和guava通常是一个好主意,看看你是不是试图做还没有完成

答案 1 :(得分:0)

如果要从InputStream保存文件,请使用apache-commons的这种方法 FileUtils.copyInputStreamToFile()

public static void copyInputStreamToFile(InputStream source,
                     File destination)
                              throws IOException

将InputStream源中的字节复制到文件目标。如果它们不存在,将创建到目的地的目录。目标将被覆盖,如果它已经存在。源流已关闭。

如果可用的话,总是使用文件和IO相关的东西。还有一些其他可用的实用方法&amp;你可以探索。

IOUtils

FileUtils

答案 2 :(得分:0)

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