Size: a a a

Kotlin Community

2020 December 07

AN

Alexander Nozik in Kotlin Community
Sobolev Erik
Сравнительно недавно мне бы пригодилось =). Я просто в строку все данные перевел, потом распарсил. А ведь и правда можно было через сериализацию =))
Ну сейчас можно через JsonElement. Но в принципе же можно просто напрямую воткнуть енкодер в декодер....
источник

AN

Alexander Nozik in Kotlin Community
Глубокая копия редко нужна. Но вот я только что напоролся на случай, где она нужна и руками там больно прописывать, классов много.
источник

LS

Leonard Startsev in Kotlin Community
Alexander Nozik
Вот мысль какая: kotlinx-serialization может использоваться для глубокого клонирования. Кто-нибудь думал об этом?
в начальной версии сериализации был какой-то прототип для этого, но его выкинули, потому что особо никому не нужен был
источник

AN

Alexander Nozik in Kotlin Community
Leonard Startsev
в начальной версии сериализации был какой-то прототип для этого, но его выкинули, потому что особо никому не нужен был
Ну особо действительно не нужен. Но интересная возможность на тот редкий случай, когда оно нужно. У меня кейс такой - в норме серилизация идет на беке, десериализация на фронте, поэтому есть изоляция. Но вот иногда я хочу ту же апишку применить напрямую на беэке и вот тут приходится шаманить потому что объекты изменяемые.
источник

AN

Alexander Nozik in Kotlin Community
Leonard Startsev
в начальной версии сериализации был какой-то прототип для этого, но его выкинули, потому что особо никому не нужен был
источник

AN

Alexander Nozik in Kotlin Community
Пока наверное через Json сделаю
источник

RI

Ruslan Ibragimov in Kotlin Community
Надо тогда еще маппинг втащить, чтобы модели в/из dto конверитить)
источник

AN

Alexander Nozik in Kotlin Community
Ruslan Ibragimov
Надо тогда еще маппинг втащить, чтобы модели в/из dto конверитить)
Кстати да. Можно же с однима сериализатором енкодить, с другим декодить. Выглядит интересно.
источник

RI

Ruslan Ibragimov in Kotlin Community
Получается что на самом деле kotlinx.serialization это такой продвинутый typeOf
источник

RI

Ruslan Ibragimov in Kotlin Community
К которому прикрутили маршаллер/анмаршаллер
источник

AN

Alexander Nozik in Kotlin Community
Ruslan Ibragimov
Получается что на самом деле kotlinx.serialization это такой продвинутый typeOf
Ну на нем можно в принципе любую компайл-тайм интроспекцию делать.
источник

RE

Roman Elizarov in Kotlin Community
Базовую реализацию очень легко сделать. Пишешь encoder который просто все примитивы складывает в ArrayList<Any?>, а декодер так же последовательно оттуда достает. Можно еще упороться и сделать отдельную структуры для Int/Long/Double и других "примитивных примитивов" чтобы сэкономить на боксинге и тогда будет вообще огонь — на порядки быстрей чем через JSON.
источник

AL

Anton Lakotka in Kotlin Community
По-идее можно даже не хранить в энкодере.
источник

AL

Anton Lakotka in Kotlin Community
а напрямую вызывать декодер
источник

AN

Alexander Nozik in Kotlin Community
Roman Elizarov
Базовую реализацию очень легко сделать. Пишешь encoder который просто все примитивы складывает в ArrayList<Any?>, а декодер так же последовательно оттуда достает. Можно еще упороться и сделать отдельную структуры для Int/Long/Double и других "примитивных примитивов" чтобы сэкономить на боксинге и тогда будет вообще огонь — на порядки быстрей чем через JSON.
Ну я понял, что легко. У меня пока времени нет. Но выглядит как полезная штука. Положу в очередь задач если никто другой не сделает (у моей очереди пока края не видать, я там допиливаю очерь крутую штуку по визуализации и обещал ее сделать до конца года вместе со статьей).
источник

RE

Roman Elizarov in Kotlin Community
Anton Lakotka
а напрямую вызывать декодер
Так не получится. Не ты вызываешь декодер, а декодер вызывает тебя когда ему нужен следующий примитив.
источник

AL

Anton Lakotka in Kotlin Community
Roman Elizarov
Так не получится. Не ты вызываешь декодер, а декодер вызывает тебя когда ему нужен следующий примитив.
да, я перепутал их местами 🙂
источник

VP

Vladimir Petrakovich in Kotlin Community
Roman Elizarov
Так не получится. Не ты вызываешь декодер, а декодер вызывает тебя когда ему нужен следующий примитив.
Звучит как хорошее место для применения Sequence, разве нет?
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Звучит как хорошее место для применения Sequence, разве нет?
Можно на блокировки сильно налететь. Но это уже отпимизация.
источник

RE

Roman Elizarov in Kotlin Community
Так просто sequence не получится сделать. Тут нужно что-то типа Loom-а, но Loom так медленно переключает, что решение с переброской через массив будет на порядок быстрей работать.
источник