написать буфер в памяти из C / C ++ и читать из него в Java без JNI - PullRequest
4 голосов
/ 25 октября 2011

У меня вопрос, возможно ли это и как? Чтение байтов из буфера в памяти, которая была создана из C / C ++ с Java? Моя идея состоит в том, чтобы использовать JNI для запуска цикла в C ++, который записывает байты в буфер и отправляет только направление буфера в Java, затем Java считывает из него байты в другом цикле. Цель состоит в том, чтобы уменьшить вызов функций JNI, потому что я заметил, что они снижают производительность. Я хочу знать, какие классы я должен использовать в Java и какие функции в C ++.

Заранее большое спасибо

1 Ответ

4 голосов
/ 25 октября 2011

Вы можете использовать ByteBuffer. Самый простой подход - использовать ByteBuffer.allocateDirect(), используя адрес, выделенный Java. Если вам нужно использовать адрес, предоставленный C, вы можете изменить адрес и ограничение (для размера), чтобы оно указывало на то, что вам нравится.

Если вы предпочитаете использовать что-то более низкого уровня, в JVM Oracle вы можете использовать методы Unsafe.getXxxx(long address) или Unsafe.setXxxx(long address, T value), но их следует использовать с осторожностью, поскольку неправильное использование может привести к сбою JVM. (Точно так же, как использование недопустимого указателя в C). Эти методы используются ByteBuffer и превращаются в одну инструкцию машинного кода, которая оптимизируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...