当前位置: 首页 > 面试题库 >

Java多连接下载

佴淮晨
2023-03-14
问题内容

我想获得一些建议,我已经开始了一个新项目,以创建一个使用多个连接的Java下载加速器。我想知道如何最好地做到这一点。

到目前为止,我已经知道可以使用HttpUrlConnection并使用range属性,但是想知道执行此操作的有效方法。一旦我从多个连接下载了零件,我就必须加入零件,以便最终得到一个完全下载的文件。

提前致谢 :)


问题答案:
  1. 获取要下载的文件的 内容长度
  2. *根据条件(大小,速度等)进行 *划分
  3. 运行多个线程下载开始在不同位置的文件,
    并将它们保存在不同的文件myfile.part1myfile.part2,…

  4. 下载后,将零件合并为 一个文件

我尝试了以下代码来获取内容长度:

public Downloader(String path) throws IOException {
    int len = 0;
    URL url = new URL(path);
    URLConnection connectUrl = url.openConnection();
    System.out.println(len = connectUrl.getContentLength());
    System.out.println(connectUrl.getContentType());

    InputStream input = connectUrl.getInputStream();
    int i = len;
    int c = 0;
    System.out.println("=== Content ==="); 
    while (((c = input.read()) != -1) && (--i > 0)) {
        System.out.print((char) c);
    }
    input.close(); 
}

以下是加入文件的示例代码:

public void join(String FilePath) {
    long leninfile=0, leng=0;
    int count=1, data=0;
    try {
        File filename = new File(FilePath);
        RandomAccessFile outfile = new RandomAccessFile(filename,"rw");
        while(true) {
            filename = new File(FilePath + count + ".sp");
            if (filename.exists()) {
                RandomAccessFile infile = new RandomAccessFile(filename,"r");
                data=infile.read();
                while(data != -1) {
                    outfile.write(data);
                    data=infile.read();
                }
                leng++;
                infile.close();
                count++;
            } else break;
        }
        outfile.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
}


 类似资料:
  • 我在从Java到mySQL的连接上遇到了问题。我正在使用带有NetBeans的Linux,并且我下载了特定的驱动程序。我在XAMPP中有mySQL。 我的代码是: 我得到的错误是: com.mysql.jdbc.CommunicationsException:由于基础异常导致通信链接失败: **开始嵌套异常** java.net.ConnectException消息:Conexión rehusa

  • 嗨,我想下载一个多java的文件。网套接字。我可以通过基本的get请求获取文件: 这是完美的,但还不够,因为我希望使用多套接字。我可以通过请求HEAD获得头,这样我就可以只获得内容长度。现在我的计划是使用此代码创建线程。例如,如果我想下载一个有3个线程的文件;我将把内容长度除以3,然后用3个线程下载。(0-99) (100-199) (200-299) = 300300字节,然后我会加入部分,但我

  • 本文向大家介绍说下左连接和右连接相关面试题,主要包含被问及说下左连接和右连接时的应答技巧和注意事项,需要的朋友参考一下 比如有两张表 A,B。左连接是把符合条件的所有A表的内容列出来,B表如果没有内容匹配用NULL代替。 右连接是符合条件的所有B表的内容列出来,A表如果没有内容匹配用NULL代替

  • 问题内容: 我正在使用Microsoft SQL Server 2005。 我想我需要一个子查询。 我正在寻找每个客户一(1)行,其中AvailableAction字段是每个客户的所有操作的串联。 我希望输出为: 问题答案: 2005年起 我认为您无法使用FOR XML EXPLICIT来获得此功能,因此,如果这是2000,那么您就不走运了(就简单的解决方案而言)。

  • 问题内容: 我有一个由15种方法组成的Java程序。并且,这些方法在程序执行过程中非常频繁地被调用。目前,我正在每种方法中创建一个新连接并调用它们上的语句(数据库在网络上的另一台计算机上设置)。 我想知道的是:我应该只在main方法中创建一个连接并将其作为参数传递给需要连接对象的所有方法,因为这将大大减少程序中的连接对象数量,而不是创建在每种方法中都非常频繁地关闭连接。 我怀疑我在当前设计中不能非

  • 用法同WebSocket 服务器 - 会话数据