Java套接字获取范围请求

时间:2016-12-23 18:24:11

标签: java multithreading sockets http

我试图通过为每个线程定义一个范围来发送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是标题。那么无论如何只得到没有标题的文件正文?

由于

1 个答案:

答案 0 :(得分:0)

  

据我了解,这些额外的324和327是标题。那么,有没有办法只获取没有标题的文件正文?

否,如果您使用超文本传输​​协议,则不会,因为标头是HTTP的一部分。