há uma “melhor prática” para acessar outro processo no sistema operacional através de java?
-
03-07-2019 - |
Pergunta
Estive lendo Skype4Java (api java para skype) e notei que eles usam JNI para acessar o cliente skype.
intuitivamente eu assumir que já existe uma biblioteca padrão em java que tem uma implementação jni sensível ao sistema operacional para acessar outros processos. I criado para olhar para um, mas não conseguiu encontrá-lo.
Existe uma biblioteca? Se não, há uma prática recomendada para acessar outro processo no sistema operacional, não necessariamente um cliente skype?
Solução
Eu acho que talvez você precisa definir o que significa 'acesso' para você. Se você está falando sobre comunicação inter-processo velho liso, então soquetes ou JNI são realmente a sua melhor aposta.
O comentário de Garth sobre como usar arquivos de memória mapeada é interessante - eu usei FMM e arquivos virtuais para IPC entre aplicativos C muitas vezes, mas nunca me ocorreu que a implementação MMF de Java pode ser compatível com o sistema de arquivos virtual OS nativo. Esses tipos de arquivos virtuais geralmente requerem configuração não-trivial, então eu ficaria surpreso se ele iria trabalhar ...
Tudo dito, a menos que você está bombeando quantidades maciças de dados entre aplicativos, usando sockets é provavelmente a maneira mais universal e eficaz de fazê-lo. Certifique-se que você conta para endianness entre o sistema operacional hospedeiro e Java VM: -)
Outras dicas
De Java 1.4 em diante você pode usar arquivos de memória mapeada para trocar informações arbitrária com outro processo. Veja java.nio.MappedByteBuffer para mais detalhes.
Esta não é bem o que você está procurando, mas provavelmente vai ajudar muito no entanto: o Java projeto Native Acesso em java.net.
Não se esqueça soquetes ...