0

我正在编写一个服务器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 创建作业仍在运行。我怎样才能同步这两个工作?

4

1 回答 1

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;
于 2016-04-21T09:05:42.083 回答