Отправка данных между Java и C++ в Windows?
Вопрос
Я хочу отправить необработанный аудиобуфер в С++ для перекодирования звука.у меня есть два варианта
- используя трубопроводный поток
- использование прямых буферов (java.nio)
Действительно ли это два моих лучших варианта (и какие люди порекомендуют?) Спасибо!
Решение
Прямые буферы в NIO почти наверняка будут иметь лучшую производительность.Это практически идеальный случай для прямых буферов.
Я не уверен, в чем смысл вашего вопроса - если вы хотите знать, есть ли другие варианты, то ответ, конечно, пока (вы могли бы, например, записать в файл, а затем вызвать внешнее приложение для его обработки - или вы можете использовать JNI без прямых буферов).Но если вам нужен тесно связанный высокопроизводительный интерфейс между кодом Java и C++, то JNI вместе с прямыми буферами станет подходящим инструментом.
Другие советы
JNI легко испортить, поэтому люди склонны на это жаловаться.Но это отличный и чрезвычайно стабильный вариант, если все сделано правильно.
Вы можете использовать сокеты (которые принимают локальные соединения), но я думаю, это будет более эффективно в системах *nix.
Если вам не нужно перекодирование в реальном времени, я бы выбрал подход с буферами.Таким образом, вы получите лучший контроль и будете уверены, что ни один байт не будет потерян.