我试图通过为每个线程定义一个范围来发送get请求来下载多线程文件。我在发送头请求后将内容长度分成线程数。假设长度是1587,当我有2个线程时,我把它分为2件794和793。这是我的代码:
threads[i] = new Thread() {
public void run() {
try {
Socket sock = new Socket(host, 80);
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(sock.getOutputStream()));
writer.write("GET " + fileName + " HTTP/1.1 \r\nHost: "
+ host + "\r\nRange: bytes=" + newPart[j] + "-"
+ newPart[j + 1] + "\r\n\r\n");
writer.flush();
DataInputStream is = new DataInputStream(
sock.getInputStream());
byte[] buffer = new byte[newPart[j + 1] - newPart[j]
+ 1];
int count = 0;
int offset = newPart[j];
while ((count = is.read(buffer)) != -1) {
System.out.println("Count: " + count);
System.out.println("offset: " + offset);
oss[j].seek(newPart[j]);
oss[j].write(buffer, 0, count);
offset +=count;
}
System.out.println();
sock.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
获取文件后,我想同时写入本地文件。但我有一个问题。我期待2块字节有794和793大小。但是控制台中的输出(当我尝试写入文件时偏移和计数)就是这样:
Count: 794
offset: 0
Count: 324
offset: 794
Count: 794
offset: 793
Count: 327
offset: 1587
newPart数组包含[0,794,1587]
我不知道这324和327是什么。因此我无法正确写入文件。你能帮帮我吗?
编辑:据我所知,这些额外的324和327是标题。那么无论如何只得到没有标题的文件正文?由于
答案 0 :(得分:0)
据我了解,这些额外的324和327是标题。那么,有没有办法只获取没有标题的文件正文?
否,如果您使用超文本传输协议,则不会,因为标头是HTTP的一部分。