Есть ли простой, беспроблемный подход к сериализации в Scala/Java, который похож на Python pickle? Pickle - это мертвое простое решение, которое разумно эффективно в пространстве и времени (то есть не является абсурдным), но не заботится о возможности межязыкового доступа, управления версиями и т.д. И допускает дополнительную настройку.
Что я знаю:
- Встроенная сериализация Java печально медленна ([1], [2]), раздутой и хрупкой. Также нужно отмечать классы как Serializable --- раздражающие, когда есть вещи, которые явно сериализуемы, но которые не имеют этой аннотации (например, не многие авторы Point2D отмечают эти Serializable).
- Scala BytePickle требует кучу шаблона для каждого типа, который вы хотите рассолить, и даже тогда не работает с (циклическими) графами объектов.
- jserial: Unmaintained и не кажется быть намного быстрее/меньше, чем стандартная сериализация Java.
- kryo: Невозможно (де-) сериализовать объекты без 0-arg ctors, что является серьезным ограничением. (Также вам нужно зарегистрировать каждый класс, который вы планируете сериализовать, иначе вы получите значительное замедление/раздувание, но тем не менее оно все же быстрее, чем рассол.)
- protostuff: AFAICT, вы должны зарегистрировать каждый класс, который вы собираетесь сериализовать заранее, в "схеме".
Kryo и protostuff - самые близкие решения, которые я нашел, но мне интересно, есть ли там что-нибудь еще (или если есть способ использовать их, о которых я должен знать). Пожалуйста, включите примеры использования! В идеале также включают контрольные показатели.