Сериализируйте структуры данных в C

Существует еще один способ, а не сообщение

//that way, send many object types diferentes
public anotherWayToReciveParameter(Object... objects)
{
    //ready with array
    final int length =objects.length;
    System.out.println(length);
    //for ready same list
    Arrays.asList(objects);
}

, что более легко, зависит от контекста

41
задан Daniel Lucraft 17 December 2008 в 18:18
поделиться

6 ответов

Выезд tpl. Из обзора:

Tpl является библиотекой для сериализации C данные. Данные хранятся в его естественной двоичной форме. API является маленьким и пытается остаться "вне пути". По сравнению с использованием XML tpl быстрее и легче использовать в программах C. Tpl может сериализировать много типов данных C, включая структуры.

16
ответ дан Robert Gamble 23 September 2019 в 15:44
поделиться

Я знаю, что Вы просите библиотеку. Если Вы не можете найти один (:: испуг:: Вы думали бы, что это было решенной проблемой!), вот схема для решения:

необходимо быть в состоянии записать генератор кода [1] для сериализации деревьев/графиков без (времени выполнения), предварительно обрабатывающего справедливо просто.

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

  • Для указателя на другие объекты (т.е. char *name;), который Вы знаете , отдельно ссылаются, можно сериализировать целевые данные непосредственно.

  • Для объектов, которые могли бы быть, умножают refernced, и для других узлов Вашего дерева необходимо будет представить структуру указателя. Каждому объекту присваивают номер сериализации, который является тем, что выписано оперативный из указателя. Поддержите структуру перевода между текущим положением памяти и числом сериализации. При обнаружении с указателем посмотрите, присваивают ли ему уже номер, в противном случае дайте его один и очередь, которые возражают для сериализации.

Чтение назад также требует node-#/memory-location шаг перевода и могло бы быть легче сделать в двух передачах: повторно создайте узлы с числами узла в слотах указателя (неверный указатель, быть предупрежденными) для обнаружения, куда каждый узел помещается, затем обойдите структуру, снова чинящую указатели.

я ничего не знаю о tpl, но Вы могли бы быть в состоянии осуществить контрейлерные перевозки на нем.

<час>

формат on-disk/network должен, вероятно, быть структурирован с некоторой информацией о типе. Вам будет нужна искажающая имя схема.

<час>

[1] КОРЕНЬ использование этот механизм для оказания очень гибкой поддержки сериализации в C++.

<час>

Последнее дополнение: мне приходит в голову, что это не всегда столь легко, как я подразумевал выше. Считайте следующее (изобретенным и плохо разработанным) объявлением:

enum {
   mask_none = 0x00,
   mask_something = 0x01,
   mask_another = 0x02,
   /* ... */
   mask_all = 0xff
};
typedef struct mask_map {
   int mask_val;
   char *mask_name;
} mask_map_t;
mask_map_t mask_list[] = {
   {mask_something, "mask_something"},
   {mask_another, "mask_another"},
   /* ... */
};
struct saved_setup {
   char* name;
   /* various configuration data */
   char* mask_name;
   /* ... */
};

и предполагают что мы initalize struct saved_setup объекты так, чтобы mask_name точки в mask_list[foo].mask_name.

, Когда мы идем для сериализации данных, что мы делаем с struct saved_setup.mask_name?

необходимо будет заботиться в разработке структур данных и/или принести некоторую определенную для случая аналитику к процессу сериализации.

10
ответ дан dmckee 23 September 2019 в 15:44
поделиться

Можно смотреть на eet. Библиотека проекта просвещения сохранить типы данных C (включая вложенные структуры). Хотя почти все освобождает проекта просвещения, находятся в предварительном альфа-состоянии, eet уже выпущен. Я не уверен, однако, если это может обработать циклические ссылки. Вероятно, нет.

4
ответ дан quinmars 23 September 2019 в 15:44
поделиться

Я предполагаю, что Вы говорите о хранении структуры графика, если не тогда игнорируют...

, Если бы Ваше хранение графика, я лично думаю, лучшая идея реализовала бы функцию, которая преобразовывает Ваш график в матрицу смежности. Можно тогда сделать функцию, которая преобразовывает матрицу смежности в структуру данных графика.

Это обладает тремя преимуществами (который может или не может иметь значения в Вашем приложении):

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

я использовал этот метод во время проекта CS и определенно, как я сделал бы это снова.

можно читать больше о матрице смежности здесь: http://en.wikipedia.org/wiki/Modified_adjacency_matrix

2
ответ дан Jonathan Leffler 23 September 2019 в 15:44
поделиться
3
ответ дан plan9assembler 23 September 2019 в 15:44
поделиться

Теоретически YAML должен делать то, что вы хотите http://code.google.com/p/yaml -cpp /

Сообщите мне, работает ли это для вас.

0
ответ дан 27 November 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: