ZipOutputStream到网络

时间:2017-10-26 04:20:39

标签: java performance networking optimization zip

我希望能够通过网络读取多个数据流,并将文件写入网络,组合所有这些多个文件。

由于文件可能非常庞大,我不想做任何本地IO文件操作,而是操作数据流。 从网络读取流,以zip方式将流写入网络。

我正在尝试以下示例代码,但我没有看到任何文件正在远程主机上写入。 如果我使用FileInputStream然后写入本地磁盘文件,则不是通过网络写入。

我缺少什么来写网络?

   InputStream input = new URL("http://www.cacr.caltech.edu/projects/danse/talks/kickoff/07-Butler/SANS_DANSEkickoffAug06.pdf").openStream();



    URL url = new URL("http://posttestserver.com/post.php?dir=ziptest");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setDoInput(true);

    ZipOutputStream zipOutputStream = new ZipOutputStream(connection.getOutputStream());



   zipOutputStream.putNextEntry(new ZipEntry("1.pdf"));

    byte[] buffer = new byte[0xFFFF];



    for (int len; (len = input.read(buffer)) != -1;) {
        zipOutputStream.write(buffer, 0, len);
    }


    zipOutputStream.putNextEntry(new ZipEntry("2.pdf"));

    InputStream input1 = new URL("http://www.pdf995.com/samples/pdf.pdf").openStream();

    for (int len; (len = input1.read(buffer)) != -1;) {
        zipOutputStream.write(buffer, 0, len);
    }



    zipOutputStream.close();

    int responseCode = connection.getResponseCode();
    System.out.println("HTTP response code="+responseCode);

    connection.disconnect();

1 个答案:

答案 0 :(得分:1)

你没有做任何输入,所以实际上什么都没发生。您至少需要获取HTTP响应代码:

int responseCode = connection.getResponseCode();
System.out.println("HTTP response code="+responseCode);

更好的是,根据需要读取输入或错误流,然后关闭它。

编辑您是否考虑过检查文件?这是我刚刚创建的一个:

Time: Thu, 26 Oct 17 05:36:04 +0000
Source ip: 107.23.92.82

Headers (Some may be inserted by server)
HTTP_ACCEPT_LANGUAGE = en
HTTP_HOST = posttestserver.com
HTTP_CONNECTION = Keep-Alive
HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5
HTTP_ACCEPT_ENCODING = gzip,deflate
REMOTE_ADDR = 107.23.92.82
DOCUMENT_ROOT = /var/www/html
REQUEST_SCHEME = http
CONTEXT_PREFIX = 
CONTEXT_DOCUMENT_ROOT = /var/www/html
REMOTE_PORT = 52482
GATEWAY_INTERFACE = CGI/1.1
REQUEST_METHOD = GET
QUERY_STRING = dir=ziptest
REQUEST_URI = /post.php?dir=ziptest
PHP_SELF = /post.php
REQUEST_TIME_FLOAT = 1508996164.351
REQUEST_TIME = 1508996164

No Post Params.
Empty post body.

您需要将正文编写为名称 - 值配对参数,例如' zip文件= .................&#39 ;.如何使用二进制数据跟随任何人的猜测。严格来说,您应该对数据进行URL编码。但真正需要的是取决于目标系统的行为方式。很可能你应该使用PUT而不是POST。