2010-11-12 18 views
1

J'utilise une bibliothèque native dans android pour le streaming.convertir int16_t en jbytearray


Voici le scénario:

Je passe une URL pour fichier c et après beaucoup de son traitement écrit les données dans le fichier wav. Je ne suis pas très familier avec C mais ce que je peux comprendre, c'est qu'il y a un pointeur de int16_t à partir duquel le fichier wav est écrit.


Voici la question.

Y at-il un moyen de convertir int16_t en jbytearray afin que je puisse retourner un tableau d'octets à mon code java?

Merci

Répondre

0

Vous devez allouer un octet [], puis copier les données WAV dans celui-ci. Sinon, créez un ByteBuffer "direct" qui couvre les données WAV et transmettez-le dans votre code Java.

Lisez le JNI documentation et le JNI Tips doc pour plus d'informations. En particulier:

SetByteArrayRegion NewDirectByteBuffer

+0

pouvez-vous s'il vous plaît donner plus de détails à ce sujet? – Prasham

1

je ne sais pas la première chose à propos de Android, mais vous pouvez regarder dans java.nio.ByteBuffer - ils peuvent être faits pour leur allouer en mémoire tampon native (allocateDirect()), de sorte que les fonctions natives peuvent écrire directement dans ça.

+0

ne pas liée à Java, toutes mes opérations doit être fait en c ** ** code ne si son sur l'accès à une variable créée ou de le transmettre 'I Need convertir int16_t en jbytearray' c'est essentiel pour moi. – Prasham

+0

De toute façon merci pour votre réponse – Prasham

+0

@ user503249: * ... afin que je puisse retourner un tableau d'octets à mon code java. * Ma réponse était une tentative de vous montrer pourquoi cela pourrait ne pas être nécessaire: Votre code C pourrait écrire ses données directement dans le tampon utilisé par l'objet 'ByteBuffer'. – DevSolar