существует ли «лучшая практика» для доступа к другому процессу в ОС через Java?
-
03-07-2019 - |
Вопрос
Я читал Skype4Java (java API для Skype) и заметил, что они используют jni для доступа к клиенту Skype.
интуитивно я предполагаю, что в Java уже есть стандартная библиотека, которая имеет чувствительную к ОС реализацию jni для доступа к другим процессам.Я начал искать один, но не смог его найти.
Есть ли такая библиотека?если нет, есть ли лучший способ получить доступ к другому процессу в операционной системе, не обязательно к клиенту Skype?
Решение
Я думаю, что, возможно, вам нужно определить, что для вас означает «доступ».ЕСЛИ вы говорите о старом простом межпроцессном взаимодействии, то лучшим выбором будут сокеты или JNI.
Комментарий Гарта об использовании файлов с отображением в памяти интересен: я много раз использовал MMF и виртуальные файлы для IPC между приложениями C, но мне никогда не приходило в голову, что реализация MMF в Java может быть совместима с собственной виртуальной файловой системой ОС.Подобные виртуальные файлы обычно требуют нетривиальной настройки, поэтому я был бы удивлён, если бы это сработало...
В общем, если вы не перекачиваете огромные объемы данных между приложениями, использование сокетов, вероятно, является наиболее универсальным и эффективным способом сделать это.Обязательно учитывайте порядок байтов между операционной системой хоста и виртуальной машиной Java :-)
Другие советы
Начиная с Java 1.4, вы можете использовать файлы, отображаемые в памяти, для обмена произвольной информацией с другим процессом.Подробности см. в java.nio.MappedByteBuffer.
Это не совсем то, что вы ищете, но, тем не менее, это, вероятно, очень поможет:тот Собственный доступ к Java проект на java.net.
Не забудьте розетки...