Страница 1 из 2

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

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

заранее пасиб.

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

Добавлено: 18 июн 2008, 22:58
Ranger
могу рассказать, как на Java сделать :roll: :alco: :mrgreen2:

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

Добавлено: 19 июн 2008, 00:14
папа Карло
Ranger писал(а):могу рассказать, как на Java сделать :roll: :alco: :mrgreen2:
давай... там наверняка ченить похожее есть. :)

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

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

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

Добавлено: 19 июн 2008, 10:28
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();

Ни разу не пробывал, интересно, что получиться.

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

Добавлено: 19 июн 2008, 11:06
pastor
Если объект и потомки поддерживают сериализацию, то Object.Serialize(), Object.Deserialize() :)
Хинт: поскольку будете сериализовать дерево объектов, не забудьте после сериализации (если в файл или строку) вызвать метод Flush у XmlWriter. А то я давеча полчаса голову ломал почему у меня полученный xml в результате сериализации third-party объекта с потомками был not well-formed, да еще и неполный (обрыв на полуслове). Как говорится, "сливайте воду!" :D

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

Добавлено: 19 июн 2008, 11:34
Marmot
Все завит от того, как надо сериализовать.
Если бы хоть как-нибудь, то сoйдет и XML
Если надо что бы это все делалось побыстрее,то лучше использовать встроенные средства сериализации в бинарные потоки, типа Java-вских Object(In/Out)putStream
Если скорость (де)сериализации критична, то лучше все писать бинарно самим, ручками, если эти ручки правилно приделаны, если нет, смотри выше ... :)
Хотя, помоему я где-то видел альтернативные и быстрые библиотеки бинарной сериализации для Java ...

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

Добавлено: 19 июн 2008, 11:42
Zy
Marmot писал(а):Все завит от того, как надо сериализовать...
На Marmot'a трудно ориентироваться, у него Java Marmot Edition, расширенная версия, как я помню, она позволяет, например, так переопределять методы в классе, что даже если объект null, он все равно может их вызывать. У нас таких возможностей нет, так что приходится делать криво.

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

Добавлено: 19 июн 2008, 11:44
pastor
Marmot по-любому прав: бинарная (де)сериализация будет шустрее по-любому.

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

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

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

Добавлено: 19 июн 2008, 12:21
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!

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

Добавлено: 19 июн 2008, 12:58
Zy
Хм... В каком месте Технического Задания было сказано про "шустрость работы"?

Представляю, что получает от вас заказчик с таким подходом.

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

Добавлено: 19 июн 2008, 13:08
Marmot
Zy писал(а):Хм... В каком месте Технического Задания было сказано про "шустрость работы"?
Так я и написал "Если бы хоть как-нибудь, то сoйдет и XML" :)
Zy писал(а):Представляю, что получает от вас заказчик с таким подходом.
Хмм, подумал я, а кто у меня заказчик: мой босс? так ему надо чтоб все работало,не падало и как можно быстрее. Наши юзвери, так им нужно то же само... :)
А ежели оно будет падать или тормозить, то меня будут будить по ночам с требованием пофиксить, меня уже жизнь научила :)
Я теперь пишу так, что бы спать спокойно :)

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

Добавлено: 19 июн 2008, 16:54
(Alex)
можно глянуть на Hessian, там внутри есть пара классов в hessiancsharp.io CHessianInput и CHessianOutput. Протокол компактный, бинарный, есть имплементация для Javа.

Но если подходить критически, то лучше писать своими руками под свою задачу, как мармот говорит.

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

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