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




Я бы открыл сокетное соединение между двумя приложениями. Вы можете сериализовать объект в массив байтов и сделать так, чтобы сервлет Java десериализовал его в объект Java с тем же значением. Таким образом, если определение класса изменится, вам нужно будет изменить код только в двух местах.
Я бы сериализовал объекты в XML или google protobuf на стороне C и десериализовал их на стороне апплета с помощью одного десериализатора. Т.е. не иметь более одного класса, который выполняет десериализацию. Сделайте так, чтобы пользователь выполнил версию сериализации и чтобы объект, выполняющий десериализацию, вызывал исключение, если версия, которую он пытается прочитать, не имеет обратной совместимости. Было бы плохой практикой проводить сериализацию и десериализацию всего кода.
Возможно, вы захотите взглянуть на Буферы протокола
Они позволяют определять структурированные данные, а затем генерировать код для чтения и записи сообщений на любом из поддерживаемых языков. Единственная загвоздка в том, что я думаю, что пока они поддерживают только C++, хотя я знаю, что был интерес к прямой реализации C.
Это выглядит достаточно просто, сервер может использовать код C++, просто он в настоящее время написан на всем C, но я намерен это изменить.
Это может быть не лучшим решением, если производительность становится проблемой. XML не очень экономит пространство