如何在JAVA中将ZipOutputStream提供给网络

时间:2016-04-21 08:43:26

标签: java zipinputstream

我在JAVA编写服务器,客户端请求下载多个文件和服务器将创建ZipOutputStream并立即提供服务。另一方面,另一个线程将写入ZipOutputStream。我使用了piped input/output stream

代码

PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out);
ZipOutputStream zout = new ZipOutputStream(out);
new Thread{
  public void run(){
       while(condition){
           more logic.. 
           zout.write(data,0,length);
           zout.flush()
       }
       zout.close();
       out.close();
  }
}.start();
return in;

但是当我单击下载按钮时,它下载(立即完成)一个小文件(已损坏),而我的zip创建作业仍在运行。我该如何同步这两项工作?

1 个答案:

答案 0 :(得分:0)

您应该flush然后关闭ZipOutputStream。最好使用ZipEntry创建存档

    ZipOutputStream zout = new ZipOutputStream(out);
    new Thread {
        public void run () {
            while (condition) {
                // logic ...
                zipEntry = new ZipEntry("name");
                zout.putNextEntry(zipEntry);
                zout.write(data);
                zout.flush();
                zout.closeEntry();
            }
            zout.flush();
            zout.close();
        }
    }.start();

    return in;