Как мне сделать это с помощью гуавы?
Есть ли способ достичь ниже, используя Гуава?
//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 ответ
Решение
Для первого варианта будет:
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;