2012-10-19 15 views
5

Biorąc ZipFilezip, jego ZipEntryentry i kierować FileunzippedEntryFile, co jest najbardziej czytelny sposób pisać entry do unzippedEntryFile?Najbardziej czytelny sposób zapisu pliku ZipEntry do pliku?

wymyśliłem następujące rozwiązanie używając Google Guava i Apache.Commons.IO:

InputSupplier<ByteArrayInputStream> entryInputSupplier = ByteStreams.newInputStreamSupplier(IOUtils.toByteArray(zip.getInputStream(entry))); 
Files.copy(entryInputSupplier, unzippedEntryFile); 

Jednak coś mi mówi, może być wykonany prostsza.

Dzięki
Konrad

Odpowiedz

3

Nie wiem, co jest nieczytelne w Twoim kodzie, poza tym, że masz dużo zagnieżdżonych połączeń. Mogą one zostać rozbite i przypisane do zmiennych lokalnych, co spowodowałoby, że kod byłby dłuższy (ale, moim zdaniem, bardziej czytelny).

Wygląda na to, że przetwarzasz dane dwukrotnie - raz, aby przeczytać je w tablicy bajtów i ponownie, aby skopiować je do pliku. Nie testowałem tego, ale to powinno działać i zmniejszyć ilość ruchu danych w połowie:

final InputStream zipStream = zip.getInputStream(entry); 
InputSupplier<InputStream> supplier = new InputSupplier<InputStream>() { 
    InputStream getInput() { 
     return zipStream; 
    } 
}; 
Files.copy(supplier, unzippedEntryFile); 

Można było w rzeczywistości, stworzyć swój własny mały klasy, która implementuje InputSuppler<InputStream>. Jestem zaskoczony, że nie mogłem znaleźć w bibliotece Guava. (Wygląda na to, że others have been surprised at this as well.)

+0

Przez "czytelność" miałem na myśli także zwięzłość, więc chciałem uniknąć tworzenia nowej anonimowej klasy i ogólnie wierzyłem, że mniej połączeń może być dokonanych, aby osiągnąć to samo. –

1

Oto szybki link, który może mieć wszystkie możliwe scenariusze Zip file operation. Jeśli jest to prosta operacja na plikach, oto tutorial firmy Sun. Jestem pewien, że istnieje wiele API open source. Oto link do IO tutorial. Pozdrowienia

Powiązane problemy