Я работаю над приложением C++
, которое должно обрабатывать различные типы сообщений. Один из типов - serialized Java objects
(для которого нет источника).
Мне интересно, знает ли кто-нибудь о библиотеке С++ в строках jdeserialize
?
Для тех, кто не знаком с этим, jdeserialize в основном разбирает сериализованные объекты и строит график.
Он отлично работает, и я экспериментировал с ним - используя JNI для управления взаимодействием с основной программой.
Это работает правильно, но громоздко. Я обеспокоен тем, что это будет головная боль обслуживания.
Десериализация Java в С++
Ответ 1
Java ABI не совместим с С++, поэтому вы не можете этого сделать. Объекты представлены в памяти по-разному (и это определенно не единственное важное различие, но этого должно быть достаточно).
Ответ 2
Я думаю, что лучший подход - написать код сначала в Java, а затем преобразовать этот код в С++. Для более быстрого запуска, заимствуя знания из Java сначала, и поэтапную реализацию, и эмуляцию некоторых функций (нет необходимости десериализовать ArrayList). Возможно, будет выполнен исходный код Jdeserialize, упомянутый @user888379. В любом случае вы, вероятно, захотите также десериализовать объекты в Java, для структурного сравнения с кодом С++.
Ответ 3
Я бы десериализовал его в JVM JVM, а затем использовал Java-методы для перевода данных в формат, который вам понадобится для вашей программы на С++. Есть достаточно различий между Java и С++, что даже если вы можете сделать это непосредственно на С++, вам нужно будет симулировать хороший кусок среды Java, чтобы иметь смысл данных.
Сериализованные объекты Java редко представляют собой одиночные объекты, они часто становятся "веб-сайтами" связанных объектов, таких как объект, содержащий карту, с несколькими строками в качестве ключей, которые ссылаются на who-know-what as values. И это только один встроенный атрибут.