Сериализация данных в C - PullRequest
2 голосов
/ 06 июля 2010

Скажите, пожалуйста, как сериализовать данные (например, двоичные файлы) в C. И как я могу отправить эти сериализованные данные через сокеты, чтобы они могли быть успешно получены соответствующим клиентом Java.

На самом делея хочу преобразовать этот двоичный файл в байтовый массив, чтобы его можно было отправлять через сокеты.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 06 июля 2010

Для взаимодействия между C и Java вы можете использовать Буферы протокола Google (эталонная реализация Google поддерживает C ++ и Java, и есть сторонние реализации для простого C).

2 голосов
/ 06 июля 2010

Рассматривали ли вы использование формата связи, такого как JSON вместо необработанного байта RPC

Для получения информации о библиотеках, предоставляющих JSON для C & Java (дополнительные сведения доступны на JSON site)

  1. Переполнение стека в C реализации JSON :
  2. JsonGlib (библиотека GNOME C JSON, упомянутая вышессылка)
  3. JSON на Java

Преимущества использования JSON включают:

  1. Независимость от языка
  2. Легко для машин анализировать и генерировать
  3. Легко для людей читать и писать (протокол буфера не предлагает этого)

JSON будет идеальным в случае, если вам нужно передать объектэкземпляров.Однако, если вы действительно имеете дело с плоскими двоичными файлами (которые не являются сериализованными объектами), то, скорее всего, лучше подойдут буферы протокола от Google, как предложено caf (особенно, если это большие файлы).

NB: JSON требует, чтобы содержимое вашего байта было закодировано в строку BASE64 для передачи.

0 голосов
/ 06 июля 2010

Обе функции send () / recv () в C и java.lang.Socket легко работают с байтовыми массивами.Таким образом, если все, что вам нужно, это просто отправка простых байтовых массивов без какой-либо специфической для структуры кодировки, вам не нужно никакой сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...