2011-09-24 8 views
3

J'essaie de transférer un flux de chaînes de mon programme C++ vers mon programme Java de manière efficace, mais je ne suis pas sûr de savoir comment procéder. Quelqu'un peut-il poster des liens/expliquer l'idée de base sur la façon de mettre en œuvre cela?Transfert rapide de données C++ vers Java

Je pensais écrire mes données dans un fichier texte, puis lire le fichier texte de mon programme Java, mais je ne suis pas sûr que ce sera assez rapide. J'en ai besoin pour qu'une seule chaîne puisse être transférée en 16ms afin que nous puissions obtenir environ 60 chaînes de données dans le programme C++ en une seconde.

+1

Par exemple en utilisant l'entrée standard et la sortie standard. –

Répondre

2

Les fichiers texte peuvent facilement être écrits et lus à partir de 60 chaînes de valeur en quelques millisecondes seulement.

Quelques alternatives, si vous trouvez que vous utilisez en synchronisation des troubles de toute façon:

Utiliser la programmation socket. http://beej.us/guide/bgnet/output/html/multipage/index.html. Les prises devraient être assez rapides.

Il existe d'autres alternatives, comme le service de messagerie TIBCO, qui sera un ordre de grandeur plus rapide que ce que vous avez besoin: http://www.tibco.com/

Une autre alternative serait d'utiliser une table mysql pour transmettre les données, et potentiellement Il suffit de définir une variable d'environnement pour indiquer que la table doit être interrogée pour les entrées les plus récentes. Ou je suppose que vous pourriez juste utiliser une variable d'environnement elle-même pour transmettre toutes les informations - 60 chaînes n'est pas beaucoup.

Les deux premières options sont les plus respectables.

+0

Savez-vous ce que Tibco utilise pour faire l'IPC? –

+0

pour les fichiers texte, comment assureriez-vous la protection en écriture? pour que les lectures ne se produisent pas pendant les écritures? Est-ce fait automatiquement par le système d'exploitation? – Andrew

+0

Je crois en certains de leurs produits qu'ils utilisent la mémoire partagée. Au-delà, je ne sais pas. – loki11

0

Quasiment aucune façon que vous faites cela sera vite. Un fichier est susceptible d'être le plus lent et il pourrait être environ 10ms au total! Un Socket sera similaire si vous devez créer une nouvelle connexion aussi (c'est la connexion, pas les données qui prendront le plus de temps). Utiliser une socket a l'avantage de l'expéditeur et du récepteur sachant combien de données ont été produites. Si vous utilisez un fichier à la place, vous avez besoin d'une autre façon de dire, le fichier est terminé maintenant, vous devriez le lire. par exemple. un socket;)

Si le C++ et Java sont dans le même processus, vous pouvez utiliser un ByteBuffer pour envelopper un tableau C et l'importer en Java en environ 1 micro-seconde. Pourquoi ne pas simplement diffuser des données via des sockets?

+0

Comment faire pour la chose ByteBuffer? Pouvez-vous fournir un lien? –

+0

Je suppose que vous voulez dire quelque chose de plus spécifique que ce qui est couvert par le Javadoc. https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html Si oui, qu'aviez-vous en tête? BTW Depuis lors, j'ai écrit une bibliothèque qui est une extension de cette stratégie https://github.com/OpenHFT/Chronicle-Bytes –

Questions connexes