Я обычно иду с чем-то как...
list = ["Alpha", "Beta", "Gamma"];
output = "";
separator = "";
for (int i = 0; i < list.length ; i++) {
output = output + separator;
output = output + list[i];
separator = ", ";
}
Это работает, потому что на первой передаче, разделитель пуст (таким образом, Вы не получаете запятую в запуске, но на каждой последующей передаче, Вы добавляете запятую прежде, чем добавить следующий элемент.
Вы могли, конечно, развернуть это немного для создания его немного быстрее (присваивающий разделителю, много раз не идеально), хотя я подозреваю, что это - что-то, что компилятор мог сделать для Вас автоматически.
В конце, хотя, я подозреваю симпатичный, это что большинство функций соединения уровня языка, к которым сводятся. Не что иное как сахар синтаксиса, но это уверенный сладко.
Я не уверен, почему вы думаете, что связь на основе сокетов может вызывать проблемы с безопасностью (используйте SSL). Часто это очень хороший подход, поскольку он не зависит от языка , предполагая, что у вас есть четко определенный протокол связи. Взгляните, например, на буферы протокола Google - они генерируют необходимые классы и потоки Java.
По моему опыту, файловые системы (особенно сетевые файловые системы) не очень подходят для такого взаимодействия, поскольку они не обязательно настроены для обмена сообщениями (например, я видел, как проблемы с кешированием приводят к тому, что файлы не выбираются целевым процессом).
Другой вариант - уровень обмена сообщениями ( AMQ или Tibco, например), хотя это, вероятно, потребует больших административных затрат (плюс опыт) для настройки.
Лично я предпочел бы подход с использованием чистых сокетов из-за его гибкости и простоты. Вы будете под полным контролем .
Я использовал именованные каналы для связи между C # и кроссплатформенным приложением на C ++ и получил только хорошие результаты. Запрет на наличие сокетов - определенно правильный путь.
Розетки - это хорошо. Они дают вам возможность очень легко создать слой тестирования черного ящика вокруг каждого компонента, а также запускать каждый компонент на его собственном компьютере.
Безопасность, безусловно, вызывает беспокойство, но есть хороший набор вариантов в зависимости от того, насколько это важно является. Вы можете использовать SSL, настраиваемое квитирование, защищенный паролем вход в систему и брандмауэры, чтобы защитить его.
Изменить: Не то, что я рекомендовал бы, но есть также разделяемая память с использованием JNI. Просто подумал, что упомяну об этом, потому что его нет в вашем списке.