11.07.2015 Views

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

106КодингСЕРИАЛИЗАЦИЯСериализация без напрягаБЕЗ НАПРЯГАPROTOBUF VS. BOOST::SERIALIZATION.НА САМОМ ДЕЛЕ ЗДЕСЬ ТОЛЬКОПРО PROTOBUF, ВЕДЬ У НИХМИЛЛИАРДЫ!ХАКЕР 04 /171/ 2013Все программы работают сданными. Эти данные надо гдетохранить и иногда куда-нибудьпередавать. Для того и другогопридумали много полезного.Но вот часто в самой программемы работаем с этими даннымисовсем в другом виде и намприходится писать много кода,чтобы засейвить состояниеобъектов в ПО. Сегодня мыузнаем, как избежать написаниякилобайтов вспомогательногокода сериализации.deeonisdeeonis@gmail.comДля начала небольшой ликбез. Сериализация —это процесс перевода какой-либо структурыданных в последовательность байт. Эта последовательностьможет быть как бинарнымпредставлением этих данных, так и текстовым.В большинстве случаев сериализация нужна для сохранениясостояния программы на жесткий диск или пересылки какихлибосообщений по сети. Распаковка сериализованных данныхназывается десериализацией.СЕРИАЛИЗАЦИЯ СВОИМИ РУКАМИКогда перед программистом встает задача упаковки структурданных, например для их последующей передачи по сети,у него есть несколько путей, по которым он может пойти. Одиниз них — написать все самому, с нуля. Но и тут перед ним открываетсяразвилка из трех дорог.Самый простой и довольно популярный способ — это представитьвсе данные в виде строк. В этом случае на выходе мыполучим поток ASCII-символов (а может быть, и не ASCII), которыйзатем будет передан по сети или записан в файл. Еслипопробовать набросать схематичный код, то он будет выглядетьпримерно так:Сериализация в строкиclass MyClass{int x;int y;std::string str;public:void MyClass(){x = 120;y = 23;str = "some string"}}std::string save(){std::stringstream out;out

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!