Передача данных из C в Java

Как лучше всего передавать данные между сервером C Java-апплету? В настоящее время это делается с помощью буфера и копирования байтов в него с помощью memcpy, но если объект когда-либо изменится, я должен выследить каждый экземпляр того, где он отправляется апплету, и изменить его.

Есть ли лучший способ передать объект в Java? Как бы ты это сделал?

Отредактируйте для пояснения: он переходит с сервера C только на Java-апплет, Java-сервлета нет. Единственное, что апплет передает серверу C, - это шестнадцатеричное число, сигнализирующее о том, что действие должно быть выполнено.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 102
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я бы открыл сокетное соединение между двумя приложениями. Вы можете сериализовать объект в массив байтов и сделать так, чтобы сервлет Java десериализовал его в объект Java с тем же значением. Таким образом, если определение класса изменится, вам нужно будет изменить код только в двух местах.

Я бы сериализовал объекты в XML или google protobuf на стороне C и десериализовал их на стороне апплета с помощью одного десериализатора. Т.е. не иметь более одного класса, который выполняет десериализацию. Сделайте так, чтобы пользователь выполнил версию сериализации и чтобы объект, выполняющий десериализацию, вызывал исключение, если версия, которую он пытается прочитать, не имеет обратной совместимости. Было бы плохой практикой проводить сериализацию и десериализацию всего кода.

Это может быть не лучшим решением, если производительность становится проблемой. XML не очень экономит пространство

Stephan Eggermont 12.11.2008 01:59
Ответ принят как подходящий

Возможно, вы захотите взглянуть на Буферы протокола

Они позволяют определять структурированные данные, а затем генерировать код для чтения и записи сообщений на любом из поддерживаемых языков. Единственная загвоздка в том, что я думаю, что пока они поддерживают только C++, хотя я знаю, что был интерес к прямой реализации C.

Это выглядит достаточно просто, сервер может использовать код C++, просто он в настоящее время написан на всем C, но я намерен это изменить.

Malfist 12.11.2008 02:16

Другие вопросы по теме