Какой самый быстрый способ передачи данных между C++ и Java

У меня есть программа на C++ и программа на Java. На стороне C++ у меня есть вектор, содержащий миллионы записей. Мне нужно перенести эти данные в мою программу Java. До сих пор я пробовал следующее:

  • Создал сокет unix, преобразовал вектор в длинную строку (Serialized) и отправил его через сокет unix

  • Создана модель экономичного сервера / клиента для передачи данных.

Оба подхода работали очень хорошо, но производительность, которую я получаю, довольно низкая. Я даже не вижу, используя полную пропускную способность сети (в случае экономии).

Также с подходом сокетов Unix, так как я сериализую его в String, а затем снова преобразую эту строку обратно в массив строк (полученный byte[] в String и split) на стороне Java, это очень дорогая операция.

Каков наилучший способ более быстрой передачи данных из мира C++ в мир Java с меньшими затратами на реконструкцию / сериализацию объекта?

1 ответ

Если обе проблемы находятся на одной и той же машине, я бы использовал сопоставленный файл общей памяти.

Таким образом, обе программы могут обращаться к данным на полной скорости памяти без сериализации / десериализации, особенно если значения int, long или double.

Вы можете поместить файл на диск tmpfs или ram, чтобы избежать попадания на жесткий диск.

Другие вопросы по тегам