2010-09-27 6 views
7

¿Hay alguna forma de lograr lo siguiente usando guayaba?¿Cómo hago esto usando guayaba?

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

Thanks.

Respuesta

12

Para el primero, una opción sería:

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

No sé que esto sería necesariamente más rápido que anexar en un bucle (y, obviamente, se trata de la construcción de otra cadena basada en las líneas, así), pero se lee mejor.

Para las otras dos ... Guava en realidad no ofrece nada específico para la serialización. Dicho esto, puedes construir algunas utilidades buenas además del soporte IO de Guava si quieres. Pasar por un intermedio byte[] parece un desperdicio para serializar o deserializar objetos cuando podría estar escribiendo/leyendo los objetos directamente a/desde una secuencia. Métodos como estos serían bastante fáciles de escribir:

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

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