2016-04-21 6 views
0

Я пишу сервер в JAVA, где клиент просит загрузить несколько файлов, а сервер создаст ZipOutputStream и немедленно подаст заявку. С другой стороны, другой поток будет записываться в ZipOutputStream. Я использовал piped input/output stream.Как обслуживать ZipOutputStream для сети в JAVA

Код

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; 

Но когда я нажимаю кнопку загрузки его загрузки (закончить сразу) небольшой файл (поврежден), а мой почтовый создания задания по-прежнему работает. Как синхронизировать эти два задания?

+0

Vaiya, вы промотали после записи? –

+1

Я не сфотографировал и не работал. – shantanu

+0

Заканчиваете ли вы PipedOutputstream до того, как Thread записывается в zout? – Gilfoyle

ответ

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; 
+0

Я точно сделал тот же код. Впервые я не использовал методы flush и closeEntry. Но использование этих методов также не помогло. – shantanu

 Смежные вопросы

  • Нет связанных вопросов^_^