Повышение и целостность зерновых сериализации - PullRequest
0 голосов
/ 07 марта 2020

Я просмотрел документацию библиотеки Boost Serialization и Cereal, но не нашел ничего конкретного c. Мне интересно, можно ли проверить целостность сериализованных данных. Я не говорю об аспекте безопасности, но если по какой-либо причине сохраненный файл поврежден, загруженные данные могут быть полностью неверными. Есть ли что-то, что поддерживается в этих библиотеках по этому аспекту? Я подумал реализовать что-то подобное сам, но есть проблема в фазе загрузки для обеих библиотек:

template<class Archive>
void load(Archive& ar) {
   //checksum here??
   ar >> mydata;
}

Чтобы вычислить контрольную сумму, мне нужно прочитать все данные. Однако для обеих библиотек я ничего не могу извлечь из архива, я могу просто заполнить атрибуты класса, надеясь, что все загружено без ошибок, и затем Я могу вычислить контрольную сумму. Я хотел бы вычислить контрольную сумму, прежде чем загружать атрибуты класса. Возможно ли это?

1 Ответ

0 голосов
/ 09 марта 2020

Я не знаю сериализации, которая делает это специально.

При необходимости иногда выполняется сериализация объекта, а затем этот байтовый поток и его ha sh являются полями в другом промежуточном объекте, который также сериализуется. Этот последний поток байтов - это то, что передается.

При получении этот поток байтов десериализуется, восстанавливая промежуточный объект. Ha sh его поля bytestream вычисляется и сравнивается с его полем ha sh. Если все в порядке, то поле байтового потока можно безопасно десериализовать, чтобы восстановить исходный объект.

Это немного неэффективно - есть два объекта для сериализации. Тем не менее, промежуточный объект в основном является просто потоком данных, и это часто может быть очень тривиально для сериализации (особенно для двоичных сериализаторов, таких как GPB).

Это также часто не нужно. Такие вещи, как файловые системы, TCP и др. c. в них уже встроено множество проверок и исправлений ошибок. Если ваш транспортный носитель уже содержит встроенную проверку целостности данных, его дополнение может оказаться излишним. Вы упомянули о хранении файлов - использование файловой системы, такой как ZFS, было бы отличным способом обеспечения хорошей целостности данных (плюс множество других преимуществ), уменьшая необходимость вашей собственной проверки. Независимо от того, что вы делаете, ZFS все равно будет применять исправление ошибок к сохраненным данным.

...