JNI API имеет метод с именем NewDirectByteBuffer , который объявлен как:
jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity);
То, что он делает, это берет область памяти, описанную void*
, указывающей на ее верхнюю часть и длину, и создает ByteBuffer , обертывающий ее. Это не копия; изменения в буфере изменят данные в области памяти.
ByteBuffer имеет довольно богатый API. Не существует стандартного способа создания InputStream, который читает из, или OutputStream, который пишет в один, но такие вещи было бы очень легко написать.