2010-09-27 3 views
7

Existe-t-il un moyen de réaliser ce qui suit en utilisant Goyave?Comment est-ce que je fais cela en utilisant la goyave?

//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) 

Merci.

Répondre

12

Pour la première, une option serait:

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

Je ne sais pas que ce serait nécessairement plus rapide que dans une boucle annexant (et, évidemment, il implique la construction d'une autre chaîne sur la base des lignes ainsi), mais il est plus agréable.

Pour les deux autres ... Guava n'offre vraiment rien de spécifique à la sérialisation. Cela dit, vous pouvez construire de bons utilitaires en plus de la prise en charge des E/S de Guava si vous le souhaitez. Passer par un intermédiaire byte[] semble inutile pour sérialiser ou désérialiser des objets lorsque vous pouvez écrire/lire les objets directement vers/depuis un flux. Des méthodes comme celles-ci seraient assez faciles à écrire:

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

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