У меня есть Java-код, который вызывает в собственный код C ++ через JNI. Сегодня результат, полученный кодом C ++, возвращается в виде строки XML.
Я хотел бы заменить его объектом Protocol Buffers.
Теперь у меня есть два варианта после создания объекта PB:
Кто-нибудь пробовал второй вариант? Это будет работать? Есть потенциальные проблемы с этим?
Благодарю.
Ваш вопрос несколько неясен о том, что подразумевается под «Объект буферов протокола«Я предполагаю, что вы имеете в виду объект сообщения, сгенерированный из .прото подать protoc
, Тогда я смею сказать, что это не сработает. Пока ПБ форма сериализации действительно кросс-платформенный и кросс-языковой, реализация нет. Хотя вы можете вызывать методы на объектах Java в C (++) благодаря обширному массиву функций C, предоставляемых JNI, не существует обратного интерфейса, чтобы сделать то же самое из Java (для объектов C ++).
Но в любом случае объекты PB — не что иное, как инструментальные структуры. Инструментарий полезен только для сериализации PB. Если вы не будете использовать сериализацию, PB для вас совершенно бесполезен. Если ваш XML имеет, по крайней мере, несколько стабильную структуру (в любом случае PB не будет содержать неизвестную структуру), почему бы вам не отразить это в простом объекте Java, передать его на стороне C ++ через JNI и заполнить там, используя все упомянутые функции JNI? ?
Других решений пока нет …