Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.04.2012, 10:55
Rundll вне форума Посмотреть профиль Отправить личное сообщение для Rundll Найти все сообщения от Rundll
  № 1  
Ответить с цитированием
Rundll

Регистрация: Jan 2012
Сообщений: 23
По умолчанию Сериализация Dictionary в SharedObject

Здравствуйте!

Про сериализацию на форуме писали много, но по своей проблеме я так ничего и не нашел. Экспериментировал с сохранением массива заполненного объектами Dictionary (ключ String, значение Int) в SharedObject. При этом все Dictionary одинаковые. Столкнулся с тем, что при десериализации читается 1-й объект Dictionary, а последующие равны null. Тот же эксперимент с ArrayCollection окончился успешно. IExternalizable и RegisterAliasClass юзаю. Кстати, если открыть получившийся файл (что с массивом Dictionary, что с массивом ArrayCollection) в нем содержится первый элемент массива, а ниже файл заполнен спецсимволами, это ошибка записи или в AMF используются алгоритмы сжатия?

Старый 17.04.2012, 15:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
ОК, для начала внесем немного ясности:
1. Dictionary можно сериализовать прямо как есть.
2. Прямо как есть сериализуется с багами (если было занесено два ключа простых типов, а потом один из ключей удалили, то другой остается при условии что строковое представление ключей одинаковое).
3. Баг легко избегается потому что Dictionary никогда не нужно использовать с ключами примитивных типов (т.как это вобщем-то и не возможно). Поскольку Dictionary является динамическим классом то при попытке записать в него ключ простого типа в первую очередь будет сделана попытка записать его как свойство динамического класса, а не как ключ. (Если по-простому, вы его будете использовать как будто это обычный Object или любой другой динамический объект).
4. ArrayCollection - это класс противопоказаный к использованию в любой ситуации. Если бы вы могли его удалить из фреймворка - это было бы самым оптимальным вариантом. Его никогда и ни в коем случае не нужно сериализировать уже хотя бы потому, что вы не сохраните порядок в массиве, фильтр, позиции курсоров / закладок и т.п. Этот класс был написан паталогическими идиотами которых неизвестно где раскопала компания Адоби, поэтому даже близкий контакт с этим классом способен привести к легкой форме шизофрении.
5. Вы добъетесть абсолютно того же эффекта что и от сериализации ArrayCollection если будете сериализовать ее source свойство. С той разницей, что будет по-крайней мере очевидно, что вы делаете. При этом вы сэкономите пару тактов процессора и, что немаловажно, зависимости к флексовому фреймворку.
__________________
Hell is the possibility of sanity

Старый 18.04.2012, 10:04
Rundll вне форума Посмотреть профиль Отправить личное сообщение для Rundll Найти все сообщения от Rundll
  № 3  
Ответить с цитированием
Rundll

Регистрация: Jan 2012
Сообщений: 23
Ок, спасибо за прояснение ситуации, ArrayCollection стараюсь избегать. Вопрос собственно таков: почему объект Dictionary сам по себе сериализуется без проблем, а Array of Dictionary - не сериализуется вообще. Вру, он вроде сериализуется (файл создается), но не десериализуется. Точнее даже так, первый элемент читается, второй и третий - нет, четвертый читается, последующие - нет и т.д. В конце концов я перехватывал по крайней мере 2 ошибки, одна из которых Error #2006: The supplied index is out of bounds. ArrayCollection воспользовался чисто из любопытства. Таким образом подставив ArrayCollection вместо Dictionary и получив Array of ArrayCollection сериализация прошла успешно, что подтвердилось успешной десериализацией.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:23.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.