2010-09-27 2 views
7

Есть ли способ достижения нижеследующего с помощью Guava?Как это сделать с помощью 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) 

Спасибо.

ответ

12

Для первого, один вариант был бы:

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

Я не знаю, что это обязательно будет быстрее, чем добавление в цикле (и, очевидно, она включает в себя построение другой строки на основе линий, а также), но он читается лучше.

Для двух других ... Гуава действительно не предлагает ничего конкретного для сериализации. Тем не менее, вы можете создать некоторые полезные утилиты поверх поддержки IO от Guava, если хотите. Переход через промежуточный byte[] кажется расточительным для сериализации или десериализации объектов, когда вы могли писать/читать объекты непосредственно в/из потока. Способов, подобных этим, было бы довольно легко написать:

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

Object deserialize(InputSupplier<? extends InputStream> inputSupplier) 
    throws IOException, ClassNotFoundException; 
Смежные вопросы