Инкрементальный формат обмена - PullRequest
0 голосов
/ 22 апреля 2009

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

Муха в мази заключается в том, что мне нужно, чтобы формат был инкрементным: программа A время от времени добавляет данные в файл, а затем программа B глотает всю партию, когда она готова. Из того, что я прочитал, ни XML, ни JSON не могут этого сделать, поскольку им обоим требуется ровно один элемент верхнего уровня в файле.

Есть что-то, что я пропускаю?

Пояснение:

Мне нужна структура типа XML, а CSV - нет. (Ну, я мог бы сделать мутантный вариант CSV, который больше никто не смог бы прочитать, но это то, чего я пытаюсь избежать.)

A не знает, когда он будет завершен (зависит от действий пользователя, доступности сетевых подключений и других таких непредсказуемых переменных), поэтому A не может сказать «теперь я запишу последний конечный тег и передачу обслуживания в B» потому что A может быть вызван снова до B.

Ответы [ 3 ]

1 голос
/ 22 апреля 2009

Таким образом, A всегда необходимо написать правильно сформированный файл, чтобы B мог прочитать его в любое время.

Если вы используете XML (и это кажется уместным), вам всегда придется писать правильно сформированный документ (например, содержащий один корневой узел и подузлы внутри). Таким образом, вам придется поддерживать объект DOM в вашем процессе. В зависимости от потребления памяти, это может быть хорошо.

A может записывать это всякий раз, когда приходит обновление. Проблема здесь в том, что запись файла займет ограниченное время, и вы не хотите, чтобы B читал частично записанный файл. Здесь потребуется некоторая форма сигнализации о том, что файл завершен (использование временных файлов в качестве семафоров, переименование и т. Д.)

0 голосов
/ 22 апреля 2009

Если я правильно вас понимаю, рабочий процесс выглядит следующим образом:

  • В течение некоторого периода времени A создает данные для помещения в файл
  • Как только это будет готово, B потребляет все это.

В этом случае и XML, и JSON хороши, так как есть четкая точка, в которой работает A, и B не начинает потреблять файл, пока он не обработан (в отличие от чего-то вроде всегда открытого потока, который непрерывно передает данные).

В чем-то вроде .NET вы можете создать XmlDocument с корневым элементом и продолжать добавлять к нему узлы, пока не закончите.

0 голосов
/ 22 апреля 2009

Как насчет CSV? Легко написать - легко разобрать, если вы знаете формат и не нуждаетесь в дополнительной метаинформации.

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