zoukankan      html  css  js  c++  java
  • JNI 函数(七)NIO 操作

    JNI 函数(七)NIO 操作

      NIO 相关操作允许 Native 代码直接访问 java.nio 的直接缓冲区。直接缓冲区的内容可能存在于普通的垃圾回收器以外的本地内存。有关直接缓冲区的信息,可以参考 NIO 和 java.nio.ByteBuffer 类的规范。

      在 JDK/JRE 1.4 中引入了新的 JNI 函数,允许检查和操作做直接缓冲区

    1. NewDirectByteBuffer
    2. GetDirectBufferAddress
    3. GetDirectBufferCapacity

      每个 Java 虚拟机的实现都必须支持这些功能,但并不是每个实现都需要支持对直接缓冲区的 JNI 访问。如果 JVM 不支持这种访问,那么 NewDirectByteBuffer 和 GetDirectBufferAddress 函数必须始终返回 NULL,并且 GetDirectBufferCapacity 函数必须始终返回 -1。如果 JVM 确实支持这种访问,那么必须实现这三个函数才能返回合适的值。

    (一) 返回ByteBuffer

    函数原型:jobject NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity);

      分配并返回一个直接的 java.nio.ByteBuffer 内存块从内存地址 address 开始的 capacity 个字节.

      调用这个函数并返回字节缓冲区的对象的 Native 代码必须保证缓冲区指向一个可靠的可被读写的内存区域。进入非法的内存位置有可能会返回任意数值,DNA 不会有明显的印象,也有可能抛出异常。

      参数:

        env:JNIEnv 接口指针

        address:内存区域的起始地址

        capacity:内存区域的大小

      返回:

        返回一个新开辟的 java.nio.ByteBuffer 对象的本地引用。如果产生异常,则返回 NULL。如果 JVM 不支持 JNI 访问直接缓冲区,也会返回 NULL

      异常:

        如果缓冲区分配失败,则返回 OutOfMemoryError

    (二) 返回直接缓冲区中对象的初始地址

    函数原型:void* GetDirectBufferAddress(JNIEnv *env, jobject buf);

      获取并返回 java.nio.Buffer 的内存初始地址

      该函数允许Native代码通过直接缓冲区对象访问Java代码的同一内存区域

      参数:

        env:JNIEnv 接口指针

        buf:java.nio.Buffer 对象

      返回:

        返回内存区域的初始地址。如果内存区域未定义,返回 NULL,如果给定的对象不是 java.nio.buffer,则返回 NULL,如果虚拟机不支持 JNI 访问,则返回 NULL。

    (三) 返回直接缓冲区中对象的内存容量

    函数原型:jlong GetDirectBufferCapacity(JNIEnv *env, jobject buf);

      获取并返回 java.nio.Buffer 的内存容量。该容量是内存区域可容纳的元素的个数

      参数:

        env:JNIEnv 接口指针

        buf:java.nio.Buffer 对象

      返回:

        返回内存区域的容量。如果指定的对象不是 java.nio.buffer,则返回 -1,或者如果对象是未对齐的 view buffer 且处理器架构不支持对齐访问。如果虚拟机不支持 JNI 访问则返回 -1。

  • 相关阅读:
    BZOJ1406: [AHOI2007]密码箱 数论
    BZOJ5188: [Usaco2018 Jan]MooTube 并查集+离线处理
    BZOJ2662: [BeiJing wc2012]冻结 spfa+分层图
    BZOJ1297: [SCOI2009]迷路 矩阵快速幂
    BZOJ4887: [Tjoi2017]可乐 矩阵快速幂
    BZOJ5168: [HAOI2014]贴海报 线段树
    开发富文本编辑器的一些经验教训
    数据可视化的发展前景、商业/职业前景?
    市场调研中如何做数据分析?
    当前火热的短视频,背后有着哪些黑科技技术?
  • 原文地址:https://www.cnblogs.com/Reverse-xiaoyu/p/14136105.html
Copyright © 2011-2022 走看看