Как мне сделать это с помощью гуавы? - PullRequest
7 голосов
/ 27 сентября 2010

Есть ли способ достичь ниже, используя Гуава?

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

Спасибо.

1 Ответ

12 голосов
/ 27 сентября 2010

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

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

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

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

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

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