【发布时间】:2017-05-04 23:41:39
【问题描述】:
您好,我想用 multi java.net.Socket 的下载 一个文件。 我可以通过基本 GET 请求获取文件:
Socket socket = new Socket(serverName, 80);
DataOutputStream bw = new DataOutputStream(socket.getOutputStream());
bw.writeBytes("GET " + requestFileName + " HTTP/1.1\r\n");
bw.writeBytes("Host: " + serverName + ":80\r\n\r\n");
bw.flush();
DataInputStream in = new DataInputStream(socket.getInputStream());
OutputStream dos = new FileOutputStream(indexFileName);
byte[] buffer = new byte[2048];
while ((count = in.read(buffer)) != -1) {
dos.write(buffer, 0, count);
dos.flush();
}
dos.close();
socket.close();
这很好用,但还不够,因为我希望使用多插座。 我可以通过请求 HEAD 获得 Header,所以我只能获得 Content-Length 现在我的计划是使用此代码创建线程。例如,如果我想下载一个有 3 个线程的文件;我将 Content-Length 除以 3 并用 3 个三线程下载。 (0-99) + (100-199) + (200-299) = 300 对于 300 个字节 然后我将加入部分,但我找不到并行文件下载的方法。我只需要更改以下部分吗?
while ((count = in.read(buffer)) != -1) {
dos.write(buffer, 0, count);
dos.flush();
}
或者尝试从文件大小范围的服务器请求? 例如
- 获取0-99字节的a.dat并放入a.dat.part1
- 获取 100-199 字节的 a.dat 并放入 a.dat.part1
- 获取 200-299 字节的 a.dat 并将其放入 a.dat.part1
【问题讨论】:
-
这并没有你想象的那么重要。网络不是多线程的。注意不要在循环内冲洗。
标签: java multithreading sockets