8
votes

Passer des données entre Java et C

J'ai une structure C.

struct data{
    double value1[50];
    double value2[50];
    int count;
};


1 commentaires

Sur le côté Java, la JNA est une autre option plus facile à utiliser que JNI. Peut-être que cela rendra également la communication C plus facile. JNA.Dev.JAVA.net


5 Réponses :


2
votes

Fournissez la déclaration suivante à votre programmeur Java: xxx

dans votre code C, vous pourrez remplir la structure avec des paramètres transmis. JNI Header ressemblera à ceci: xxx


0 commentaires

1
votes

L'utilisation d'un conteneur de données standard tel que CSV est totalement approprié. Il y a des tonnes de bibliothèques de codage de CSV Java gratuites, et il en va de même pour c.

Votre programmeur Java peut toujours utiliser des structures de données Java natif, tout ce qu'il doit faire est de l'encoder en CSV (ou d'autres formats tels que XML) et vous l'envoyer.

À votre fin, tout ce que vous avez à faire est de lire ce conteneur de données à l'aide de certaines bibliothèques CSV.


1 commentaires

Une fois que vous avez commencé à avoir une sorte de données hiérarchiques, je pense que JSON vaut la peine d'être envisagé. Bien sûr, il peut être plus rapide de transporter les données entre Java et C avec JNA / JNI sous forme de structures ...



2
votes

S'il n'y a rien de mal avec le format CSV pour recevoir des données de différents programmes, je me penche vers l'utilisation de XML pour le faire. Une partie de celle-ci est la préférence subjective du format de données. Avec XML, vous pouvez définir une construction robuste que vous pouvez valider avant de lire dans votre programme. Et IMHO, une conception XML appropriée est beaucoup plus lisible pour le débogage.


1 commentaires

Pourquoi cela a-t-il été voté? Je ne vois pas ce qui ne va pas avec le post.



3
votes

Si vous souhaitez utiliser le même type de "STRIT" du côté Java, je créerais une classe qui correspond à cette structure (afin que le développeur Java et C puissent parler de la même chose): xxx PRE>

Ensuite, vous devez copier les valeurs du monde de la Java lorsque vous entrez dans JNI. C'est un exemple comment vous le faites: P>

// get the class
jclass javaDataClass = env->FindClass("JavaData");

// get the field id
jfieldID countField = env->GetFieldID(javaDataClass, "count", "I");

// get the data from the field
cData.count = env->GetIntField(jData, countField);

... (the rest of the parameters)


0 commentaires

2
votes

Vous pouvez probablement obtenir ceci pour travailler avec JNI, mais personnellement, je préfère avoir des aiguilles chaudes coincées dans mes yeux que de travailler avec Jni. Personnellement, je trouve un accès natif Java (JNA) pour être beaucoup plus facile à utiliser.


0 commentaires