【发布时间】:2016-04-21 08:43:26
【问题描述】:
我正在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 创建作业仍在运行。如何同步这两个作业?
【问题讨论】:
-
Vaiya,你写完后刷脸了吗?
-
我没有,但是flush也不起作用。
-
您是否在线程写入 zout 完成之前关闭 PipedOutputstream?
-
不,它在 zout 之后关闭。
-
为什么是线程?
PipedOutputStream和朋友的基本用途很少,这似乎不是其中之一。只需将ZipOutputStream包裹在响应输出流周围,然后在当前线程中完成。
标签: java zipinputstream