我在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创建作业仍在运行。我该如何同步这两项工作?
答案 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;