У меня есть программа на C ++ и программа на Java. На стороне C ++ у меня есть вектор, содержащий миллионы записей. Мне нужно перенести эти данные в мою программу Java. До сих пор я пробовал следующее:
Создал сокет unix, преобразовал вектор в длинную строку (Serialized) и отправил его через сокет unix
Создана модель экономичного сервера / клиента для передачи данных.
Оба подхода работали очень хорошо, но производительность, которую я получаю, довольно низкая. Я даже не вижу, используя полную пропускную способность сети (в случае экономии).
Также с подходом сокетов Unix, так как я сериализую его в String, а затем снова преобразую эту строку обратно в массив строк (полученный byte [] в String и split) на стороне Java, это очень дорогая операция.
Каков наилучший способ более быстрой передачи данных из мира C ++ в мир Java с меньшими затратами на реконструкцию / сериализацию объекта?
Если обе проблемы находятся на одной машине, я бы использовал отображенный файл общей памяти.
Таким образом, обе программы могут обращаться к данным на полной скорости памяти без сериализации / десериализации, особенно если значения int, long или double.
Вы можете поместить файл на диск tmpfs или ram, чтобы избежать попадания на жесткий диск.
Других решений пока нет …