2010-11-12 3 views
1

Я использую собственную библиотеку в android для потоковой передачи.convert int16_t в jbytearray


Вот сценарий:

Я передаю URL для файла Си и после того, как много обработки записывает данные в файл WAV.

Я не так хорошо знаком с C, но я мог понять, есть ли указатель int16_t, из которого написан wav-файл.


В этом вопрос.

Есть ли способ конвертировать int16_t в jbytearray, чтобы я мог вернуть массив байтов в свой код Java?

Благодаря

ответ

0

Вам необходимо выделить байт [], а затем скопировать в него данные WAV. Кроме того, создайте «прямой» ByteBuffer, который охватывает WAV-данные и передаст их в ваш код Java.

Прочтите JNI documentation и документ JNI Tips для получения дополнительной информации. В частности:

SetByteArrayRegion NewDirectByteBuffer

+0

не могли бы вы дать более подробную информацию об этом? – Prasham

1

Я не знаю, первым делом о Android, но вы можете захотеть взглянуть на java.nio.ByteBuffer - они могут быть сделаны, чтобы выделить их буфер в родной памяти (allocateDirect()), поэтому родные функции могут писать напрямую внутрь.

+0

это не связано с Java, все мои операции должно быть сделано в ** с ** код только ли его о доступе к созданной переменной или передать его 'I Need для преобразования int16_t в jbytearray', что важно для меня. – Prasham

+0

Anyways спасибо за ваш ответ – Prasham

+0

@ user503249: * ... так что я могу вернуть массив байтов в свой код Java. * Мой ответ был попыткой показать вам, почему это может и не понадобиться: ваш C-код мог бы записывать свои данные непосредственно в буфер, используемый объектом ByteBuffer. – DevSolar