模块  java.smartcardio
软件包  javax.smartcardio

Class CommandAPDU

  • 实现的所有接口
    Serializable

    public final class CommandAPDU
    extends Object
    implements Serializable
    遵循ISO / IEC 7816-4中定义的结构的命令APDU。 它由一个四字节头和一个可变长度的条件体组成。 此类不会尝试验证APDU是否编码语义上有效的命令。

    请注意,当在constructors中指定响应APDU的预期长度时,必须指定实际长度(Ne),而不是其编码形式(Le)。 同样, getNe()返回实际值Ne。 换句话说,值0表示“响应APDU中没有数据”而不是“最大长度”。

    此类支持Ne和Nc的短编码和扩展编码。 但请注意,并非所有终端和智能卡都能够接受使用扩展形式的APDU。

    对于头字节CLA,INS,P1和P2,Java类型int用于表示8位无符号值。 在构造函数中,只有应用程序指定的int值的8个最低位才有意义。 访问器方法始终将字节作为0到255之间的无符号值返回。

    此类的实例是不可变的。 在通过字节数组传入或传出数据的情况下,执行防御性克隆。

    从以下版本开始:
    1.6
    另请参见:
    ResponseAPDUCardChannel.transmitSerialized Form
    • 构造方法摘要

      构造方法  
      构造器 描述
      CommandAPDU​(byte[] apdu)
      从包含完整APDU内容(标头和正文)的字节数组构造CommandAPDU。
      CommandAPDU​(byte[] apdu, int apduOffset, int apduLength)
      从包含完整APDU内容(标头和正文)的字节数组构造CommandAPDU。
      CommandAPDU​(int cla, int ins, int p1, int p2)
      从四个头字节构造一个CommandAPDU。
      CommandAPDU​(int cla, int ins, int p1, int p2, byte[] data)
      根据四个头字节和命令数据构造一个CommandAPDU。
      CommandAPDU​(int cla, int ins, int p1, int p2, byte[] data, int ne)
      根据四个头字节,命令数据和预期响应数据长度构造一个CommandAPDU。
      CommandAPDU​(int cla, int ins, int p1, int p2, byte[] data, int dataOffset, int dataLength)
      根据四个头字节和命令数据构造一个CommandAPDU。
      CommandAPDU​(int cla, int ins, int p1, int p2, byte[] data, int dataOffset, int dataLength, int ne)
      根据四个头字节,命令数据和预期响应数据长度构造一个CommandAPDU。
      CommandAPDU​(int cla, int ins, int p1, int p2, int ne)
      根据四个头字节和预期的响应数据长度构造一个CommandAPDU。
      CommandAPDU​(ByteBuffer apdu)
      从ByteBuffer创建包含完整APDU内容(标题和正文)的CommandAPDU。
    • 方法摘要

      所有方法  实例方法 具体的方法 
      变量和类型 方法 描述
      boolean equals​(Object obj)
      将指定对象与此命令APDU进行相等性比较。
      byte[] getBytes()
      返回此APDU中字节的副本。
      int getCLA()
      返回类字节CLA的值。
      byte[] getData()
      返回命令体中数据字节的副本。
      int getINS()
      返回指令字节INS的值。
      int getNc()
      返回命令体(Nc)中的数据字节数,如果此APDU没有正文,则返回0。
      int getNe()
      返回响应APDU(Ne)中的最大预期数据字节数。
      int getP1()
      返回参数字节P1的值。
      int getP2()
      返回参数字节P2的值。
      int hashCode()
      返回此命令APDU的哈希码值。
      String toString()
      返回此命令APDU的字符串表示形式。
    • 构造方法详细信息

      • CommandAPDU

        public CommandAPDU​(byte[] apdu,
                           int apduOffset,
                           int apduLength)
        从包含完整APDU内容(标头和正文)的字节数组构造CommandAPDU。 APDU从字节数组中的索引apduOffset开始, apduOffsetapduLength字节。

        请注意,复制apdu字节以防止后续修改。

        参数
        apdu - 完整的命令APDU
        apduOffset - apduOffset数据开始的字节数组中的偏移量
        apduLength - APDU的长度
        异常
        NullPointerException - 如果 NullPointerException为null
        IllegalArgumentException - 如果apduOffset或apduLength为负数或者apduOffset + apduLength大于apdu.length,或者指定的字节不是有效的APDU
      • CommandAPDU

        public CommandAPDU​(ByteBuffer apdu)
        从ByteBuffer创建包含完整APDU内容(标题和正文)的CommandAPDU。 该缓冲区的position必须设置为APDU,其开始limit到APDU的结尾。 返回时,缓冲区的position等于其限制; 其限制保持不变。

        请注意,将复制ByteBuffer中的数据以防止后续修改。

        参数
        apdu - 包含完整APDU的ByteBuffer
        异常
        NullPointerException - 如果 NullPointerException为null
        IllegalArgumentException - 如果 IllegalArgumentException不包含有效的命令APDU
      • CommandAPDU

        public CommandAPDU​(int cla,
                           int ins,
                           int p1,
                           int p2)
        从四个头字节构造一个CommandAPDU。 这是ISO 7816中的情况1,没有命令体。
        参数
        cla - 类字节CLA
        ins - 指令字节INS
        p1 - 参数字节P1
        p2 - 参数字节P2
      • CommandAPDU

        public CommandAPDU​(int cla,
                           int ins,
                           int p1,
                           int p2,
                           int ne)
        根据四个头字节和预期的响应数据长度构造一个CommandAPDU。 这是ISO 7816中的情况2,指定了Ne的空命令数据字段。 如果Ne为0,则APDU编码为ISO 7816情况1。
        参数
        cla - 类字节CLA
        ins - 指令字节INS
        p1 - 参数字节P1
        p2 - 参数字节P2
        ne - 响应APDU中的最大预期数据字节数
        异常
        IllegalArgumentException - 如果ne为负数或大于65536
      • CommandAPDU

        public CommandAPDU​(int cla,
                           int ins,
                           int p1,
                           int p2,
                           byte[] data)
        根据四个头字节和命令数据构造一个CommandAPDU。 这是ISO 7816中的情况3,命令数据存在且Ne不存在。 值Nc被视为data.length。 如果data为空或其长度为0,则APDU编码为ISO 7816情况1。

        请注意,将复制数据字节以防止后续修改。

        参数
        cla - 类字节CLA
        ins - 指令字节INS
        p1 - 参数字节P1
        p2 - 参数字节P2
        data - 包含命令体数据字节的字节数组
        异常
        IllegalArgumentException - 如果data.length大于65535
      • CommandAPDU

        public CommandAPDU​(int cla,
                           int ins,
                           int p1,
                           int p2,
                           byte[] data,
                           int dataOffset,
                           int dataLength)
        根据四个头字节和命令数据构造一个CommandAPDU。 这是ISO 7816中的情况3,命令数据存在且Ne不存在。 值Nc被视为dataLength。 如果dataLength为0,则APDU编码为ISO 7816情况1。

        请注意,将复制数据字节以防止后续修改。

        参数
        cla - 类字节CLA
        ins - 指令字节INS
        p1 - 参数字节P1
        p2 - 参数字节P2
        data - 包含命令体数据字节的字节数组
        dataOffset - 命令体的数据字节开始的字节数组中的偏移量
        dataLength - 命令体中的数据字节数
        异常
        NullPointerException - 如果data为null且dataLength不为0
        IllegalArgumentException - 如果dataOffset或dataLength为负数,或者dataOffset + dataLength大于data.length或dataLength大于65535
      • CommandAPDU

        public CommandAPDU​(int cla,
                           int ins,
                           int p1,
                           int p2,
                           byte[] data,
                           int ne)
        根据四个头字节,命令数据和预期响应数据长度构造一个CommandAPDU。 这是ISO 7816中的情况4,命令数据和Ne存在。 如果data非空,则值Nc被视为data.length,否则为0。 如果Ne或Nc为零,则根据ISO 7816将APDU编码为情况1,2或3。

        请注意,将复制数据字节以防止后续修改。

        参数
        cla - 类字节CLA
        ins - 指令字节INS
        p1 - 参数字节P1
        p2 - 参数字节P2
        data - 包含命令体数据字节的字节数组
        ne - 响应APDU中的最大预期数据字节数
        异常
        IllegalArgumentException - 如果data.length大于65535或者ne为负或大于65536
      • CommandAPDU

        public CommandAPDU​(int cla,
                           int ins,
                           int p1,
                           int p2,
                           byte[] data,
                           int dataOffset,
                           int dataLength,
                           int ne)
        根据四个头字节,命令数据和预期响应数据长度构造一个CommandAPDU。 这是ISO 7816中的案例4,命令数据和Le present。 值Nc取为dataLength 如果Ne或Nc为零,则根据ISO 7816将APDU编码为情况1,2或3。

        请注意,将复制数据字节以防止后续修改。

        参数
        cla - 类字节CLA
        ins - 指令字节INS
        p1 - 参数字节P1
        p2 - 参数字节P2
        data - 包含命令体数据字节的字节数组
        dataOffset - 命令体的数据字节开始的字节数组中的偏移量
        dataLength - 命令体中的数据字节数
        ne - 响应APDU中的最大预期数据字节数
        异常
        NullPointerException - 如果data为null且dataLength不为0
        IllegalArgumentException - 如果dataOffset或dataLength为负数或者dataOffset + dataLength大于data.length,或者ne为负数或大于65536,或者dataLength大于65535
    • 方法详细信息

      • getCLA

        public int getCLA()
        返回类字节CLA的值。
        结果
        类字节CLA的值。
      • getINS

        public int getINS()
        返回指令字节INS的值。
        结果
        指令字节INS的值。
      • getP1

        public int getP1()
        返回参数字节P1的值。
        结果
        参数字节P1的值。
      • getP2

        public int getP2()
        返回参数字节P2的值。
        结果
        参数字节P2的值。
      • getNc

        public int getNc()
        返回命令体(Nc)中的数据字节数,如果此APDU没有正文,则返回0。 此调用相当于getData().length
        结果
        命令体中的数据字节数,如果此APDU没有主体,则为0。
      • getData

        public byte[] getData()
        返回命令体中数据字节的副本。 如果此APDU为无主体,则此方法返回长度为零的字节数组。
        结果
        如果此APDU没有正文,则命令正文或空字节数组中的数据字节的副本。
      • getNe

        public int getNe()
        返回响应APDU(Ne)中的最大预期数据字节数。
        结果
        响应APDU中的最大预期数据字节数。
      • getBytes

        public byte[] getBytes()
        返回此APDU中字节的副本。
        结果
        此APDU中的字节副本。
      • toString

        public String toString()
        返回此命令APDU的字符串表示形式。
        重写:
        toString在类 Object
        结果
        此命令APDU的字符串表示形式。
      • equals

        public boolean equals​(Object obj)
        将指定对象与此命令APDU进行相等性比较。 如果给定对象也是CommandAPDU并且其字节与此CommandAPDU中的字节相同,则返回true。
        重写:
        equals在类 Object
        参数
        obj - 要与此命令APDU进行相等性比较的对象
        结果
        如果指定的对象等于此命令APDU,则返回true
        另请参见:
        Object.hashCode()HashMap