WindowsSelectorImpl——pollArrayWrapper

这篇博客介绍了PollArrayWrapper类在Java中如何使用JNI管理文件描述符和事件掩码。类内部使用native数组存储,每个记录占8字节,其中4字节用于文件描述符,2字节用于事件掩码。提供了添加和获取文件描述符及事件掩码的方法。此外,还提到了添加唤醒源socket到PoolWrapper中的操作,与selector的创建相关。
摘要由CSDN通过智能技术生成

在这里插入图片描述

class PollArrayWrapper {
	//用户存储文件描述符数组的native空间
    private AllocatedNativeObject pollArray;
    //上述内存空间的地址
    long pollArrayAddress;
    //每条记录所占空间大小为8个字节
    static short SIZE_POLLFD = 8;
    //每条记录中文件描述符的相对起始偏移量
    private static final short FD_OFFSET = 0;
    //每条记录中事件掩码的相对起始偏移量
    private static final short EVENT_OFFSET = 4;
    //数组大小
    private int size;
	...
	}

pollArrayWrapper对象使用使用native数组存放文件描述符和事件掩码,并将这块内存的地址保存到pollArrayAddress中,在调用poll时将该地址传递给JNI。
对象对外提供了有关FD、Event方法。
在这里插入图片描述

每个文件8字节

//添加文件描述符
  void putDescriptor(int var1, int var2) {
        this.pollArray.putInt(SIZE_POLLFD * var1 + 0, var2);
    }
//添加事件掩码
    void putEventOps(int var1, int var2) {
        this.pollArray.putShort(SIZE_POLLFD * var1 + 4, (short)var2);
    }
//获取事件掩码
    int getEventOps(int var1) {
        return this.pollArray.getShort(SIZE_POLLFD * var1 + 4);
    }
//获取文件描述符
    int getDescriptor(int var1) {
        return this.pollArray.getInt(SIZE_POLLFD * var1 + 0);
    }

在pollArray中,每条记录占8个字节,前四个字节存放文件描述符,接着使用两个字节存放等待事件的掩码,最后两个字节存放事件发生事件的掩码(目前未使用)

事件掩码

在这里插入图片描述

AllocatedNativeObject

在这里插入图片描述

NativeObject在这里插入图片描述
addWakeupSocket

把wakeupSourceFd加到PoolWrapper中。至此selector创建完毕。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值