Ответ Денниса верен, однако есть еще один способ сделать это, который может повысить производительность, а именно с помощью прямых байтовых буферов.
Вот документы, которые вам нужно прочитать:
поддержка JNI NIO ,
ByteBuffer
Вы выделяете прямой байтовый буфер либо на стороне Java, либо на стороне C. Затем вы заполняете буфер на стороне Java, используя методы ByteBuffer, в соответствии с компоновкой вашей c-struct.
Просто помните, что эти буферы должны быть освобождены после их использования, но вы можете повторно использовать один и тот же буфер для передачи данных туда и обратно.