#scala #serialization
#scala #сериализация
Вопрос:
Я хотел бы выполнить сериализацию в Scala — я видел подобные sjson и аннотацию @serializable — однако я не смог понять, как заставить их справиться с одним серьезным препятствием — стиранием типов и дженериками в библиотеках.
Возьмем, к примеру, график для библиотеки Scala. Я активно использую это в своем коде и хотел бы записать несколько объектов, содержащих графики, на диск по всему моему коду для последующего анализа. Однако часто типы node и edge инкапсулируются в аргументы универсального типа другого класса, который у меня есть. Как я могу правильно сериализовать эти классы, не изменяя саму библиотеку, чтобы справиться с отражением, или «загрязняя» мой код, импортируя большое количество классов типов (сериализация в соответствии с тем, как просматривается объект, в любом случае совершенно неудовлетворительна …)?
Пример,
class Container[N](val g: Graph[N,DiEdge]) {
...
}
// in another file
def myMethod[N](container: Container[N]): Unit = {
<serialize container somehow here>
}
Ответ №1:
Чтобы сообщить о моих выводах, XStream в Java выполняет феноменальную работу — что угодно, будь то дженерики или иное, может быть автоматически сериализовано без какого-либо дополнительного ввода. Если вам нужен быстрый и не требующий особых усилий способ запустить сериализацию, XStream — это он!
Однако следует отметить, что выходной XML-файл не будет особенно кратким без вашего собственного ввода. Например, каждый блок памяти, используемый HashMap в Scala, будет записан, даже если большинство из них ничего не содержат!
Ответ №2:
Если вы используете графики для Scala и если JSON является вашим форматом сериализации, вы можете использовать напрямую graph-json
.
Вот код и документ.
Комментарии:
1. Да, я в курсе библиотеки, но ключевой момент в том, что графики — это одна часть гораздо большей головоломки!