- java.lang.Object
-
- javax.smartcardio.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
- 另请参见:
-
ResponseAPDU,CardChannel.transmit, Serialized 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。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 booleanequals(Object obj)将指定对象与此命令APDU进行相等性比较。byte[]getBytes()返回此APDU中字节的副本。intgetCLA()返回类字节CLA的值。byte[]getData()返回命令体中数据字节的副本。intgetINS()返回指令字节INS的值。intgetNc()返回命令体(Nc)中的数据字节数,如果此APDU没有正文,则返回0。intgetNe()返回响应APDU(Ne)中的最大预期数据字节数。intgetP1()返回参数字节P1的值。intgetP2()返回参数字节P2的值。inthashCode()返回此命令APDU的哈希码值。StringtoString()返回此命令APDU的字符串表示形式。
-
-
-
构造方法详细信息
-
CommandAPDU
public CommandAPDU(byte[] apdu)
从包含完整APDU内容(标头和正文)的字节数组构造CommandAPDU。请注意,复制apdu字节以防止后续修改。
- 参数
-
apdu- 完整的命令APDU - 异常
-
NullPointerException- 如果NullPointerException为null -
IllegalArgumentException- 如果IllegalArgumentException不包含有效的命令APDU
-
CommandAPDU
public CommandAPDU(byte[] apdu, int apduOffset, int apduLength)从包含完整APDU内容(标头和正文)的字节数组构造CommandAPDU。 APDU从字节数组中的索引apduOffset开始,apduOffset为apduLength字节。请注意,复制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中的字节副本。
-
equals
public boolean equals(Object obj)
将指定对象与此命令APDU进行相等性比较。 如果给定对象也是CommandAPDU并且其字节与此CommandAPDU中的字节相同,则返回true。- 重写:
-
equals在类Object - 参数
-
obj- 要与此命令APDU进行相等性比较的对象 - 结果
- 如果指定的对象等于此命令APDU,则返回true
- 另请参见:
-
Object.hashCode(),HashMap
-
hashCode
public int hashCode()
返回此命令APDU的哈希码值。- 重写:
-
hashCode在类Object - 结果
- 此命令APDU的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
-