Сериализация
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
Сериализация
Тов. программисты, научите как правильно и кошерно сериализовать "дерево объектов" (у рутового объекта есть вагончик подобъектов и тд...) в файлик, лучше в хмл наверное, и обратно в объектную модель? исходные данные... c#, .net v2. для простоты можно сказать что всек объекты отнаследованны от одного и тогоже класса.
заранее пасиб.
заранее пасиб.
- Ranger
- Маньяк
- Сообщения: 1199
- Зарегистрирован: 22 окт 2003, 18:28
- Откуда: 2:5025 -> Burnaby
Re: Сериализация
могу рассказать, как на Java сделать




- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
Re: Сериализация
давай... там наверняка ченить похожее есть.Ranger писал(а):могу рассказать, как на Java сделать![]()
![]()

- Stanislav
- Mr. Minority Report
- Сообщения: 45294
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: Сериализация
Вообще сериализация, вот так http://msdn.microsoft.com/en-us/library ... zable.aspxпапа Карло писал(а):Тов. программисты, научите как правильно и кошерно сериализовать "дерево объектов" (у рутового объекта есть вагончик подобъектов и тд...) в файлик, лучше в хмл наверное, и обратно в объектную модель? исходные данные... c#, .net v2. для простоты можно сказать что всек объекты отнаследованны от одного и тогоже класса.
заранее пасиб.
А в частности - полиморфизмом по "дереву об'ектов" вдарить. Куда? Вопрос вкуса - XML так XML....
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
Re: Сериализация
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();
Ни разу не пробывал, интересно, что получиться.
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: Сериализация
Если объект и потомки поддерживают сериализацию, то Object.Serialize(), Object.Deserialize()
Хинт: поскольку будете сериализовать дерево объектов, не забудьте после сериализации (если в файл или строку) вызвать метод Flush у XmlWriter. А то я давеча полчаса голову ломал почему у меня полученный xml в результате сериализации third-party объекта с потомками был not well-formed, да еще и неполный (обрыв на полуслове). Как говорится, "сливайте воду!"

Хинт: поскольку будете сериализовать дерево объектов, не забудьте после сериализации (если в файл или строку) вызвать метод Flush у XmlWriter. А то я давеча полчаса голову ломал почему у меня полученный xml в результате сериализации third-party объекта с потомками был not well-formed, да еще и неполный (обрыв на полуслове). Как говорится, "сливайте воду!"

- Marmot
- Графоман
- Сообщения: 39283
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Сериализация
Все завит от того, как надо сериализовать.
Если бы хоть как-нибудь, то сoйдет и XML
Если надо что бы это все делалось побыстрее,то лучше использовать встроенные средства сериализации в бинарные потоки, типа Java-вских Object(In/Out)putStream
Если скорость (де)сериализации критична, то лучше все писать бинарно самим, ручками, если эти ручки правилно приделаны, если нет, смотри выше ...
Хотя, помоему я где-то видел альтернативные и быстрые библиотеки бинарной сериализации для Java ...
Если бы хоть как-нибудь, то сoйдет и XML
Если надо что бы это все делалось побыстрее,то лучше использовать встроенные средства сериализации в бинарные потоки, типа Java-вских Object(In/Out)putStream
Если скорость (де)сериализации критична, то лучше все писать бинарно самим, ручками, если эти ручки правилно приделаны, если нет, смотри выше ...

Хотя, помоему я где-то видел альтернативные и быстрые библиотеки бинарной сериализации для Java ...
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
Re: Сериализация
На Marmot'a трудно ориентироваться, у него Java Marmot Edition, расширенная версия, как я помню, она позволяет, например, так переопределять методы в классе, что даже если объект null, он все равно может их вызывать. У нас таких возможностей нет, так что приходится делать криво.Marmot писал(а):Все завит от того, как надо сериализовать...
- pastor
- Завсегдатай
- Сообщения: 418
- Зарегистрирован: 21 июн 2006, 01:09
- Откуда: UA (2:4623) > Vancouver
Re: Сериализация
Marmot по-любому прав: бинарная (де)сериализация будет шустрее по-любому.
- Marmot
- Графоман
- Сообщения: 39283
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Сериализация
А тож, я все эти JEE в упор ненавижу, как только надо, хоть что-то невполне обычное или очень быстрое, так все, кирдык...Zy писал(а):На Marmot'a трудно ориентироваться, у него Java Marmot Edition, расширенная версия, как я помню, она позволяет, например, так переопределять методы в классе, что даже если объект null, он все равно может их вызывать. У нас таких возможностей нет, так что приходится делать криво.Marmot писал(а):Все завит от того, как надо сериализовать...
Поэтому мы все пишем на чистой 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: Сериализация
Да чего уж мелочиться? Надо напрямую в файлы MySQL писать! Выигрыш на отдельных операциях будет х100!Marmot писал(а):А тож, я все эти JEE в упор ненавижу, как только надо, хоть что-то невполне обычное или очень быстрое, так все, кирдык...Zy писал(а):На Marmot'a трудно ориентироваться, у него Java Marmot Edition, расширенная версия, как я помню, она позволяет, например, так переопределять методы в классе, что даже если объект null, он все равно может их вызывать. У нас таких возможностей нет, так что приходится делать криво.Marmot писал(а):Все завит от того, как надо сериализовать...
Поэтому мы все пишем на чистой JavaSE и все летает, и сериализация у нас тоже ручная, зато раз в 5 быстрее родной, не говоря уж об XML...
А сейчас я даже JDBC перестал юзать, напрямую пишу в MySQL-ные буфера, выигрыш на некоторых опреациях х10, засчет минимизации копирования памяти и UTF-8 encoding/decoding . Да и контроля намного больше, например можно задать socket timeout свой для каждого селекта
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
Re: Сериализация
Хм... В каком месте Технического Задания было сказано про "шустрость работы"?
Представляю, что получает от вас заказчик с таким подходом.
Представляю, что получает от вас заказчик с таким подходом.
- Marmot
- Графоман
- Сообщения: 39283
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Сериализация
Так я и написал "Если бы хоть как-нибудь, то сoйдет и XML"Zy писал(а):Хм... В каком месте Технического Задания было сказано про "шустрость работы"?

Хмм, подумал я, а кто у меня заказчик: мой босс? так ему надо чтоб все работало,не падало и как можно быстрее. Наши юзвери, так им нужно то же само...Zy писал(а):Представляю, что получает от вас заказчик с таким подходом.

А ежели оно будет падать или тормозить, то меня будут будить по ночам с требованием пофиксить, меня уже жизнь научила

Я теперь пишу так, что бы спать спокойно

-
- Маньяк
- Сообщения: 4203
- Зарегистрирован: 08 мар 2006, 15:45
- Откуда: Ричмонд
Re: Сериализация
можно глянуть на Hessian, там внутри есть пара классов в hessiancsharp.io CHessianInput и CHessianOutput. Протокол компактный, бинарный, есть имплементация для Javа.
Но если подходить критически, то лучше писать своими руками под свою задачу, как мармот говорит.
Но если подходить критически, то лучше писать своими руками под свою задачу, как мармот говорит.
- Stanislav
- Mr. Minority Report
- Сообщения: 45294
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: Сериализация
Заказчик никогда не знает, что ему на самом деле нужно!Zy писал(а):Хм... В каком месте Технического Задания было сказано про "шустрость работы"?
Представляю, что получает от вас заказчик с таким подходом.