У меня есть большая структура данных, которую я сериализую. В определенные моменты мне нужно редактировать значения в структуре данных. Но для изменения небольшого значения мне придется повторно сериализовать его снова вместо обновления измененное значение в файле. Я слышал об Google protocol buffer's. Воспользовавшись этим, решите мою проблему перезаписи файла? Является ли лучшим вариантом для меня использовать буфер протокола вместо сериализации Java?Буфер протокола лучше, чем сериализация?
ответ
Если вы заботитесь о производительности, не используйте текстовый формат для своих данных. Если вы хотите изменить данные без десериализации, вы захотите использовать фиксированный формат данных записи. Вам, вероятно, придется изобретать это вручную. Затем найдите правильную позицию в файле и перепишите только измененное поле. Вы можете посмотреть DataOutputStream
для начала работы или вместо этого использовать базу данных, такую как HSQLDB
, для хранения и редактирования ваших данных.
Думая об этом больше, Если ваши объекты не очень простые, я думаю, что база данных будет лучшим способом.
Более подробная информация о DataOutputStream: http://download.oracle.com/javase/tutorial/essential/io/datastreams.html
Java Базы данных: http://java-source.net/open-source/database-engines
Буферы протоколов сами являются форматом сериализации, поэтому они не будут кардинально изменять изображение (вам все равно придется повторно сериализовать после изменения значения).
Документы Google утверждают, что протокольные буферы более компактны и быстрее разбираются, чем XML (что кажется правдоподобным); не знают, как они сравниваются с собственной сериализацией Java.
Преимущества протокольных буферов могут быть переносимостью (если программы, написанные на других языках, должны читать файл) и возможность обновления (вы можете добавлять новые поля в структуру данных, не нарушая формат файла).
Вам нужен формат сериализации, который может быть непосредственно изменен, например, XML или JSON. буфер протокола Google представляет собой бинарный формат - как сериализация - и, таким образом, не может быть непосредственно Модификатора ...
Паром точек
- Существует редактор для протокола Буферов двоичного формата (http://code.google.com/p/protobufeditor/)
- Протокол буферов имеет текстовый формат, который выглядит как:
# Textual representation of a protocol buffer. # This is *not* the binary format used on the wire. person { name: "John Doe" email: "[email protected]" }
См:
- Обсуждение: http://groups.google.com/group/protobuf/browse_thread/thread/04fc478088137bf3
- Класс: http://code.google.com/apis/protocolbuffers/docs/reference/java/com/google/protobuf/TextForm
Сказав это, я хотел бы использовать технологию (JSon, Xml и т.д.), которое уже используется, если один из следующих не применяется
- Вам необходимо выполнение протокольных буферов
- Вы уже/планируете использовать протокольные буферы
вы можете дать пример кода. – Emil