- java.lang.Object
-
- javax.smartcardio.CommandAPDU
-
- 实现的所有接口
-
Serializable
public final class CommandAPDUextends Objectimplements 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。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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)
从包含完整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)
-
-