2017-02-06 5 views
0

У меня есть объект java, который я хочу отправить из Java-клиента (написанного на Java), используя сериализацию или любые другие методы, и хочу десериализовать один и тот же объект на сервере (написанный на C)?Как десериализовать объект Java в серверной программе, написанной на C?

Я попытался прочитать сообщение, полученное на C, но это несколько шестнадцатеричных значений.

Как я могу напечатать такое же значение параметров объекта в моем сервере, написанный на C.

Спасибо заранее

+0

Будет ли использование json вариантом? –

+0

@Paul .. Привет, знаю Json и уже реализован, но есть требование, в котором мне не нужно использовать Json. И ищем двоичное представление данных. Объект необходимо преобразовать в двоичный формат, а затем отправить по сети и получить его на сервере (см. C). –

+1

А какой будет бинарный формат? Вы можете столкнуться с проблемой «endian» (байты int находятся в другом порядке на разных платформах). –

ответ

0

я бы, вероятно, сериализация объекта в формате JSON; это имеет то преимущество, что сериализованный объект является удобочитаемым человеком. См this answer для руководства о том, как сериализация для JSON и this за помощью на deserialising результат в С.

+0

@Halmackenretuer .. Привет, я знаю Json и уже реализован, но есть требование, в котором мне не нужно использовать Json. И ищем двоичное представление данных. Объект необходимо преобразовать в двоичный формат, а затем отправить по сети и получить его на сервере (см. C –

+0

. Ок, вероятно, вы должны добавить эти ограничения к своему вопросу. – Halmackenreuter

+0

Можем ли мы сделать упаковку и распаковать объект , так же, как в Python у нас есть? У вас есть какие-либо идеи о том же? –

0

У меня есть объект Java, который я хочу, чтобы отправить от клиента Java (написанный на Java), используя сериализацию или любые другие методы и хотите десериализовать один и тот же объект на сервере (написанный на C)?

Вы не можете.

C даже не знает об объектах и ​​при мысли о C++ как о другом языке OO: у этого есть совершенно другое понятие объектов.

Итак, вы не можете «воссоздать» объект Java за пределами JVM.

Но вы, скорее всего, хотите передать данные ваш объект Java держит C-программу.

Для этого вы должны указать protocoll, что и программа Java, и C-программа понимают. @ Halmackenreuter была предложена одна из возможностей. Другие - XML ​​или CSV. Консенсус всех трех заключается в том, что: конвертируйте данные в текстовый файл и передайте их другому концу, который знает, как его читать (разбирать). Этот процесс называется marshalling/unmarshalling.


есть требование, в котором я не должен использовать JSON. И ищем двоичное представление данных. Объект должен быть преобразован в бинарный формат, а затем отправить по сети и получить то же самое в сервере (написанном на C - Аджай Ядав

Затем вы должны указать (или знают) этот двоичный формат и создать . поток байтов, пересылаются по сети


кто-то предложил использовать ByteBuffer него к тому же Но все же изо всех сил о том, как использовать то же самое -.. Аджай Ядав

Это все равно означает, что вы не можете отправить «объект java». Вы должны поместить данные объектов в ByteBuffer в том порядке, в котором их ожидает protocoll.

+0

Я столкнулся с некоторыми библиотеками, такими как cbor, messagepack, которые кодируют и декодируют объект между разными языками, но не могут найти его реализацию, а кто-то предложил использовать ByteBuffer это то же самое, но все еще борется за то, как использовать то же самое. –

+0

* Вы не можете. * Конечно, вы можете. Существует целый стандарт, описывающий, как Java сериализует объекты: https://docs.oracle.com/javase/7 /docs/platform/serialization/spec/serialTOC.html Это может быть утомительно, трудно поддерживать и не стоит беспокоить десериализацию объекта Java на C, но это, безусловно, возможно , Передача на основе текста намного проще. –

+0

Однако в стандарте C упоминаются «объекты». Но это не совсем то, что означает ООПЛ. – Olaf

0

Это зависит от того, как вы сериализовать ваши объекты Java. Если вы используете стандартный механизм сериализации Java, это может быть болезненным для десериализации его на один и тот же объект в C. По крайней мере, у вас будет две параллельные иерархии объектов на C и Java для поддержки.

Я рекомендовал бы взглянуть на внешние библиотеки сериализации с генерации кода, который поддерживает оба языка, C и Java:

Например:

+0

Можем ли мы сделать упаковку и распаковать объект, как у Python? –

+0

@AjayYadav Я не знаю, как это работает на Python. но на этой странице https://thrift.apache.org/ пример с определением Thrift, клиентом Python и сервером Java. В вашем прекращении вы получите определение Thrift, Java как клиент и C как сервер. Основная цель состоит в том, чтобы иметь один ресурс с определением бинарного протокола между клиентом и сервером –

+0

@AjayYadav сравнение различных библиотек сериализации: http://stackoverflow.com/questions/4633611/what-are-the-key-differences-between-apache -thrift-Google-протокол буфера-тез –

 Смежные вопросы

  • Нет связанных вопросов^_^