2010-09-27 5 views
7

C'è un modo per raggiungere il sotto usando Guava?Come faccio a fare questo usando 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) 

Grazie.

risposta

12

Per la prima, una possibilità sarebbe:

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

Non so che questo sarebbe necessariamente essere più veloce di aggiungendo in un ciclo (e, ovviamente, si tratta di costruire un'altra stringa sulla base delle linee pure), ma si legge meglio.

Per gli altri due ... Guava in realtà non offre nulla di specifico per la serializzazione. Detto questo, è possibile creare alcune utilissime utility in aggiunta al supporto IO di Guava, se lo si desidera. Passare attraverso un intermedio byte[] sembra inutile per la serializzazione o deserializzazione di oggetti quando è possibile scrivere/leggere gli oggetti direttamente da uno stream. Metodi come questi sarebbero abbastanza facili da scrivere:

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

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