Сериализация

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сериализация

Сообщение папа Карло »

Тов. программисты, научите как правильно и кошерно сериализовать "дерево объектов" (у рутового объекта есть вагончик подобъектов и тд...) в файлик, лучше в хмл наверное, и обратно в объектную модель? исходные данные... c#, .net v2. для простоты можно сказать что всек объекты отнаследованны от одного и тогоже класса.

заранее пасиб.
Аватара пользователя
Ranger
Маньяк
Сообщения: 1199
Зарегистрирован: 22 окт 2003, 18:28
Откуда: 2:5025 -> Burnaby

Re: Сериализация

Сообщение Ranger »

могу рассказать, как на Java сделать :roll: :alco: :mrgreen2:
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Re: Сериализация

Сообщение папа Карло »

Ranger писал(а):могу рассказать, как на Java сделать :roll: :alco: :mrgreen2:
давай... там наверняка ченить похожее есть. :)
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45294
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Re: Сериализация

Сообщение Stanislav »

папа Карло писал(а):Тов. программисты, научите как правильно и кошерно сериализовать "дерево объектов" (у рутового объекта есть вагончик подобъектов и тд...) в файлик, лучше в хмл наверное, и обратно в объектную модель? исходные данные... c#, .net v2. для простоты можно сказать что всек объекты отнаследованны от одного и тогоже класса.
заранее пасиб.
Вообще сериализация, вот так http://msdn.microsoft.com/en-us/library ... zable.aspx
А в частности - полиморфизмом по "дереву об'ектов" вдарить. Куда? Вопрос вкуса - XML так XML....
Zy
Маньяк
Сообщения: 4706
Зарегистрирован: 20 янв 2005, 19:11

Re: Сериализация

Сообщение Zy »

Java, что-то типа того:

XMLEncoder xmlEncoder = new XMLEncoder(new FileOutputStream("MyTree.xml"));
xmlEncoder.writeObject(myTreeObject);

и соответственно:

XMLDecoder xmlDecoder = new XMLDecoder(new FileInputStream("MyTree.xml"));
MyTreeObject myTreeObject = (MyTreeObject) xmlDecoder .readObject();

Ни разу не пробывал, интересно, что получиться.
Аватара пользователя
pastor
Завсегдатай
Сообщения: 418
Зарегистрирован: 21 июн 2006, 01:09
Откуда: UA (2:4623) > Vancouver

Re: Сериализация

Сообщение pastor »

Если объект и потомки поддерживают сериализацию, то Object.Serialize(), Object.Deserialize() :)
Хинт: поскольку будете сериализовать дерево объектов, не забудьте после сериализации (если в файл или строку) вызвать метод Flush у XmlWriter. А то я давеча полчаса голову ломал почему у меня полученный xml в результате сериализации third-party объекта с потомками был not well-formed, да еще и неполный (обрыв на полуслове). Как говорится, "сливайте воду!" :D
Аватара пользователя
Marmot
Графоман
Сообщения: 39283
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Сериализация

Сообщение Marmot »

Все завит от того, как надо сериализовать.
Если бы хоть как-нибудь, то сoйдет и XML
Если надо что бы это все делалось побыстрее,то лучше использовать встроенные средства сериализации в бинарные потоки, типа Java-вских Object(In/Out)putStream
Если скорость (де)сериализации критична, то лучше все писать бинарно самим, ручками, если эти ручки правилно приделаны, если нет, смотри выше ... :)
Хотя, помоему я где-то видел альтернативные и быстрые библиотеки бинарной сериализации для Java ...
Zy
Маньяк
Сообщения: 4706
Зарегистрирован: 20 янв 2005, 19:11

Re: Сериализация

Сообщение Zy »

Marmot писал(а):Все завит от того, как надо сериализовать...
На Marmot'a трудно ориентироваться, у него Java Marmot Edition, расширенная версия, как я помню, она позволяет, например, так переопределять методы в классе, что даже если объект null, он все равно может их вызывать. У нас таких возможностей нет, так что приходится делать криво.
Аватара пользователя
pastor
Завсегдатай
Сообщения: 418
Зарегистрирован: 21 июн 2006, 01:09
Откуда: UA (2:4623) > Vancouver

Re: Сериализация

Сообщение pastor »

Marmot по-любому прав: бинарная (де)сериализация будет шустрее по-любому.
Аватара пользователя
Marmot
Графоман
Сообщения: 39283
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Сериализация

Сообщение Marmot »

Zy писал(а):
Marmot писал(а):Все завит от того, как надо сериализовать...
На Marmot'a трудно ориентироваться, у него Java Marmot Edition, расширенная версия, как я помню, она позволяет, например, так переопределять методы в классе, что даже если объект null, он все равно может их вызывать. У нас таких возможностей нет, так что приходится делать криво.
А тож, я все эти JEE в упор ненавижу, как только надо, хоть что-то невполне обычное или очень быстрое, так все, кирдык...
Поэтому мы все пишем на чистой JavaSE и все летает, и сериализация у нас тоже ручная, зато раз в 5 быстрее родной, не говоря уж об XML...
А сейчас я даже JDBC перестал юзать, напрямую пишу в MySQL-ные буфера, выигрыш на некоторых опреациях х10, засчет минимизации копирования памяти и UTF-8 encoding/decoding . Да и контроля намного больше, например можно задать socket timeout свой для каждого селекта :)
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45294
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Re: Сериализация

Сообщение Stanislav »

Marmot писал(а):
Zy писал(а):
Marmot писал(а):Все завит от того, как надо сериализовать...
На Marmot'a трудно ориентироваться, у него Java Marmot Edition, расширенная версия, как я помню, она позволяет, например, так переопределять методы в классе, что даже если объект null, он все равно может их вызывать. У нас таких возможностей нет, так что приходится делать криво.
А тож, я все эти JEE в упор ненавижу, как только надо, хоть что-то невполне обычное или очень быстрое, так все, кирдык...
Поэтому мы все пишем на чистой JavaSE и все летает, и сериализация у нас тоже ручная, зато раз в 5 быстрее родной, не говоря уж об XML...
А сейчас я даже JDBC перестал юзать, напрямую пишу в MySQL-ные буфера, выигрыш на некоторых опреациях х10, засчет минимизации копирования памяти и UTF-8 encoding/decoding . Да и контроля намного больше, например можно задать socket timeout свой для каждого селекта :)
Да чего уж мелочиться? Надо напрямую в файлы MySQL писать! Выигрыш на отдельных операциях будет х100!
Zy
Маньяк
Сообщения: 4706
Зарегистрирован: 20 янв 2005, 19:11

Re: Сериализация

Сообщение Zy »

Хм... В каком месте Технического Задания было сказано про "шустрость работы"?

Представляю, что получает от вас заказчик с таким подходом.
Аватара пользователя
Marmot
Графоман
Сообщения: 39283
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Сериализация

Сообщение Marmot »

Zy писал(а):Хм... В каком месте Технического Задания было сказано про "шустрость работы"?
Так я и написал "Если бы хоть как-нибудь, то сoйдет и XML" :)
Zy писал(а):Представляю, что получает от вас заказчик с таким подходом.
Хмм, подумал я, а кто у меня заказчик: мой босс? так ему надо чтоб все работало,не падало и как можно быстрее. Наши юзвери, так им нужно то же само... :)
А ежели оно будет падать или тормозить, то меня будут будить по ночам с требованием пофиксить, меня уже жизнь научила :)
Я теперь пишу так, что бы спать спокойно :)
(Alex)
Маньяк
Сообщения: 4203
Зарегистрирован: 08 мар 2006, 15:45
Откуда: Ричмонд

Re: Сериализация

Сообщение (Alex) »

можно глянуть на Hessian, там внутри есть пара классов в hessiancsharp.io CHessianInput и CHessianOutput. Протокол компактный, бинарный, есть имплементация для Javа.

Но если подходить критически, то лучше писать своими руками под свою задачу, как мармот говорит.
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45294
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Re: Сериализация

Сообщение Stanislav »

Zy писал(а):Хм... В каком месте Технического Задания было сказано про "шустрость работы"?
Представляю, что получает от вас заказчик с таким подходом.
Заказчик никогда не знает, что ему на самом деле нужно!
Ответить