我想获得一些建议,我已经开始一个新项目来创建一个java下载加速器,它将使用多个连接。我想知道如何去做这件事。Java多重连接下载
到目前为止,我已经知道我可以使用HttpUrlConnection并使用range属性,但想知道这样做的有效方法。一旦我从多个连接中下载了部件,我将不得不加入这些部件,以便我们完成下载的文件。
感谢提前:)
我想获得一些建议,我已经开始一个新项目来创建一个java下载加速器,它将使用多个连接。我想知道如何去做这件事。Java多重连接下载
到目前为止,我已经知道我可以使用HttpUrlConnection并使用range属性,但想知道这样做的有效方法。一旦我从多个连接中下载了部件,我将不得不加入这些部件,以便我们完成下载的文件。
感谢提前:)
myfile.part1
, myfile.part2
,…我尝试下面的代码来获取内容长度:
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();
}
}
感谢Shaaf我认为这就是我正在寻找的,会给它一个bash :) – 2010-02-11 10:55:32
JDownloader是我见过的最好的下载器。如果你有兴趣,它是开源的,当然你可以从他们的代码中学到很多东西。
听起来不错,让我看看它吧 – 2010-02-11 08:35:18
'......当然你可以从他们的代码中学到很多东西......'不 - 只是,你甚至可以**修改**或**在您自己的程序中使用**。 (它是开源的!) – 2011-10-18 15:43:09
如果你想避免下载您加盟后段可以使用FileChannel
。
使用FileChannel
,您可以写入文件的任何位置(即使使用多个线程)。
所以,你可以先分配整个文件,然后
写段属于他们的地方,因为他们进来。
查看Javadocs page了解更多信息。
+1:我认为'FileChannel'是最有效/简单的方法来做到这一点。 – 2011-10-18 15:29:43
你的问题并不十分清楚或具体。你能澄清一下吗?谢谢 – 2010-02-11 08:31:15
@全部:**问题也需要投票!** – 2011-10-18 15:27:48