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作成ジョブがまだ実行されている間に小さなファイル(破損)がダウンロード(すぐに終了)されます。これら 2 つのジョブを同期するにはどうすればよいですか?

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 に答える