2012-10-19 3 views
5

ZipFilezip, Aufgrund seiner ZipEntryentry und Ziel FileunzippedEntryFile, was die Art und Weise lesbar ist entry-unzippedEntryFile zu schreiben?Der am besten lesbare Weg, einen ZipEntry in eine Datei zu schreiben?

kam ich mit folgenden Lösung mit Google Guava und Apache.Commons.IO up:

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

aber mir etwas erzählt kann es simplier gemacht werden.

Danke,
Konrad

Antwort

3

Ich weiß nicht, was nicht über Ihren Code lesbar ist, außer dass Sie viele verschachtelte Anrufe haben. Diese können ausgebrochen und lokalen Variablen zugewiesen werden, was den Code länger machen würde (aber meiner Meinung nach etwas lesbarer).

Sie scheinen die Daten zweimal zu verarbeiten - einmal, um sie in ein Byte-Array einzulesen und erneut in die Datei zu kopieren. Ich habe nicht getestet, aber es sollte die Datenmenge, die Bewegung in der Hälfte arbeitet und schneiden:

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

Sie könnten in der Tat, Ihre eigene kleine Klasse, die InputSuppler<InputStream> implementiert. Ich bin überrascht, dass ich in der Guava-Bibliothek keinen finden konnte. (Anscheinend, others have been surprised at this as well.)

+0

Mit "lesbar" meinte ich auch knapp, also wollte ich vermeiden, eine neue anonyme Klasse zu schaffen und allgemein glaubte ich, dass weniger Anrufe gemacht werden können, um dasselbe zu erreichen. –

1

Hier ist eine schnelle Verbindung, die alle möglichen Szenarien für Zip file operation haben könnten. Wenn es sich um eine einfache Dateioperation handelt, ist hier das Tutorial von Sun. Bin mir sicher, dass es viele Open-Source-APIs gibt. Hier ist der Link zu IO tutorial. Prost

Verwandte Themen