Показать сообщение отдельно
Старый 01.03.2018, 21:50
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 69  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Разъяснил как мог:

Цитата:
Сообщение от undefined Посмотреть сообщение
А что подразумевается под Serialize/Deserialize? Парсинг запроса/ответа в json/строку? Так такое обычно отдается serverManager'у, который сериализует реквест в стринг, шлет на серв,получает респонс и кастует его к ожидаемому типу. Как иначе то?
Ну, кастовать Object к ожидаемому типу, если ожидаемый тип конкретнее, чем Object, скорее всего, не получится. Как говорится "Мы кастовали, кастовали, да не выкастовывавали".

Десериализация — процесс перевода последовательности битов в структуру данных (via wikipedia). Парсинг, а точнее, синтаксически анализ, это и есть часть процесса десериализации.

В случае, если модель будет работать с JSON, то произойдет такая цепочка (вариант 1):
1. Чтение из источника потока байтов (файловая система или сетевой протокол), представляющих собою plain текст, который полностью подчиняется грамматике JSON;
2. Преобразование текста (десериализация и парсинг) в ActionScript Object;
3. Чтение полей из этого Object и заполнение полей конкретного объекта(ов) модели.

Второй пункт часто избыточен, поэтому десериализацию можно сделать без него (вариант 2):
1. Чтение из источника потока байтов (файловая система или сетевой протокол), представляющих собою кастомный протокол;
2. Поток по неким правилам анализируется десериализатором, который пишет в поля конкретного объекта(ов) модели.

Пример: есть протокол AMF1/3, с помощью которого происходит десериализация данных непосредственно в strong typed объект ActionScript. Однако с помощью него нельзя переписать поля существующего объекта. Десериализация потока этого протокола средствами флеша всегда приводит к созданию новых объектов.

Так вот десериализатор из второго пункта "варианта 2" может быть:
а) встроен в объекты модели;
б) внешним по отношению к объектам модели.

Пункт "а" подразумевает, что по мере чтения из потока, некто, анализируя его, извлекает из модели нужный объект и передает в него поток. Этот объект модели последовательно читает из потока нужные ему данные. Предыдущая итерация повторяется столько, сколько есть данных для модели в потоке.

Пункт "б" предпочтительнее. Некто извлекает из модели объект и сам пишет в него. Затем повторяет.

Этот некто и есть десериализатор, зависящий от конкретного протокола. Именно в нем заложены правила разбора протокола.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 01.03.2018 в 22:01.