2010-09-27 6 views
7

Gibt es eine Möglichkeit, die folgende Verwendung von Guava zu erreichen?Wie mache ich das mit Guava?

//anything better than using Files.append() in a loop? 
org.apache.commons.io.FileUtils.writeLines(File file, Collection lines, String lineEnding); 

//gives a byte[] that is fed to Files.write(byte[] from, File to) 
org.apache.commons.lang.SerializationUtils.serialize(Serializable obj) 

//get an object from a byte[] 
SerializationUtils.SerializationUtils.deserialize(byte[] from) 

Danke.

Antwort

12

Zum ersten wäre eine Option sein:

Files.write(Joiner.on(lineEnding).join(lines), file, charset); 

Ich weiß nicht, dass dies unbedingt schneller sein würde, in einer Schleife als Anhänge (und offensichtlich geht es um eine andere Zeichenfolge aufbauend auf den Linien basierte als auch), aber es liest sich besser.

Für die anderen beiden ... Guava bietet nichts wirklich Serialisierung. Das heißt, Sie können einige nützliche Dienstprogramme auf Guava IO-Unterstützung erstellen, wenn Sie möchten. Das Durchlaufen eines Intermediates byte[] scheint verschwenderisch zu sein, Objekte zu serialisieren oder zu deserialisieren, wenn Sie die Objekte direkt in einen Stream schreiben/lesen könnten. Methoden wie diese wären ziemlich einfach zu schreiben:

void serialize(OutputSupplier<? extends OutputStream> outputSupplier, 
       Object object) throws IOException; 

Object deserialize(InputSupplier<? extends InputStream> inputSupplier) 
    throws IOException, ClassNotFoundException;