2010-10-12 2 views
4

У меня есть большая структура данных, которую я сериализую. В определенные моменты мне нужно редактировать значения в структуре данных. Но для изменения небольшого значения мне придется повторно сериализовать его снова вместо обновления измененное значение в файле. Я слышал об Google protocol buffer's. Воспользовавшись этим, решите мою проблему перезаписи файла? Является ли лучшим вариантом для меня использовать буфер протокола вместо сериализации Java?Буфер протокола лучше, чем сериализация?

ответ

3

Если вы заботитесь о производительности, не используйте текстовый формат для своих данных. Если вы хотите изменить данные без десериализации, вы захотите использовать фиксированный формат данных записи. Вам, вероятно, придется изобретать это вручную. Затем найдите правильную позицию в файле и перепишите только измененное поле. Вы можете посмотреть DataOutputStream для начала работы или вместо этого использовать базу данных, такую ​​как HSQLDB, для хранения и редактирования ваших данных.

Думая об этом больше, Если ваши объекты не очень простые, я думаю, что база данных будет лучшим способом.

Более подробная информация о DataOutputStream: http://download.oracle.com/javase/tutorial/essential/io/datastreams.html

Java Базы данных: http://java-source.net/open-source/database-engines

+0

вы можете дать пример кода. – Emil

5

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

Документы Google утверждают, что протокольные буферы более компактны и быстрее разбираются, чем XML (что кажется правдоподобным); не знают, как они сравниваются с собственной сериализацией Java.

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

1

Вам нужен формат сериализации, который может быть непосредственно изменен, например, XML или JSON. буфер протокола Google представляет собой бинарный формат - как сериализация - и, таким образом, не может быть непосредственно Модификатора ...

4

Паром точек

  1. Существует редактор для протокола Буферов двоичного формата (http://code.google.com/p/protobufeditor/)
  2. Протокол буферов имеет текстовый формат, который выглядит как:
 
# Textual representation of a protocol buffer. 
# This is *not* the binary format used on the wire. 
person { 
    name: "John Doe" 
    email: "[email protected]" 
} 

См:

Сказав это, я хотел бы использовать технологию (JSon, Xml и т.д.), которое уже используется, если один из следующих не применяется

  1. Вам необходимо выполнение протокольных буферов
  2. Вы уже/планируете использовать протокольные буферы
Смежные вопросы