java.lang.Object
javax.smartcardio.CommandAPDU
- 所有已实现的接口:
-
Serializable
遵循ISO/IEC 7816-4定义的结构的命令APDU。它由四个字节的头部和可变长度的条件体组成。该类不尝试验证APDU是否编码为语义有效的命令。
请注意,当在构造函数中指定响应APDU的预期长度时,必须指定实际长度(Ne),而不是其编码形式(Le)。同样,getNe()返回实际值Ne。换句话说,值为0表示“响应APDU中没有数据”,而不是“最大长度”。
该类支持Ne和Nc的长度编码的短形式和扩展形式。但是,请注意,并非所有终端和智能卡都能接受使用扩展形式的APDU。
对于头部字节CLA、INS、P1和P2,Java类型int
用于表示8位无符号值。在构造函数中,应用程序指定的int
值的最低8位是有效的。访问器方法始终将字节作为0到255之间的无符号值返回。
该类的实例是不可变的。通过字节数组传入或传出数据时,会执行防御性克隆。
- 自:
- 1.6
- 参见:
-
Constructor Summary
ConstructorDescriptionCommandAPDU
(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) 从包含完整APDU内容(头部和体)的ByteBuffer创建CommandAPDU。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
将指定的对象与此命令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的哈希码值。toString()
返回此命令APDU的字符串表示形式。
-
Constructor Details
-
CommandAPDU
public CommandAPDU(byte[] apdu) 从包含完整APDU内容(头部和体)的字节数组构造CommandAPDU。请注意,为了防止后续修改,APDU字节会被复制。
- 参数:
-
apdu
- 完整的命令APDU - 抛出:
-
NullPointerException
- 如果apdu为null -
IllegalArgumentException
- 如果apdu不包含有效的命令APDU
-
CommandAPDU
public CommandAPDU(byte[] apdu, int apduOffset, int apduLength) 从包含完整APDU内容(头部和体)的字节数组构造CommandAPDU。APDU从字节数组中的索引apduOffset
开始,长度为apduLength
字节。请注意,为了防止后续修改,APDU字节会被复制。
- 参数:
-
apdu
- 包含完整APDU的字节数组 -
apduOffset
- apdu数据开始的字节数组中的偏移量 -
apduLength
- APDU的长度 - 抛出:
-
NullPointerException
- 如果apdu为null -
IllegalArgumentException
- 如果apduOffset或apduLength为负数,或者如果apduOffset + apduLength大于apdu.length,或者指定的字节不是有效的APDU
-
CommandAPDU
从包含完整APDU内容(头部和体)的ByteBuffer创建CommandAPDU。缓冲区的position
必须设置为APDU的起始位置,其limit
必须设置为APDU的结束位置。返回时,缓冲区的position
等于其limit
;其limit
保持不变。请注意,为了防止后续修改,ByteBuffer中的数据会被复制。
- 参数:
-
apdu
- 包含完整APDU的ByteBuffer - 抛出:
-
NullPointerException
- 如果apdu为null -
IllegalArgumentException
- 如果apdu不包含有效的命令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中预期数据字节的最大数量Ne - 抛出:
-
IllegalArgumentException
- 如果ne为负数或大于65536
-
CommandAPDU
public CommandAPDU(int cla, int ins, int p1, int p2, byte[] data) 从四个头部字节和命令数据构造CommandAPDU。这是ISO 7816中的情况3,存在命令数据且Ne不存在。如果data
为null或其长度为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不存在。如果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
为非null,则值Nc取为data.length,否则为0。如果Ne或Nc为零,则根据ISO 7816的情况1、2或3对APDU进行编码。请注意,为了防止后续修改,数据字节会被复制。
- 参数:
-
cla
- 类字节CLA -
ins
- 指令字节INS -
p1
- 参数字节P1 -
p2
- 参数字节P2 -
data
- 包含命令体数据字节的字节数组 -
ne
- 响应APDU中预期数据字节的最大数量Ne - 抛出:
-
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存在。Nc的值被视为dataLength
。如果Ne或Nc为零,则根据ISO 7816将APDU编码为情况1、2或3。请注意,数据字节被复制以防止后续修改。
- 参数:
-
cla
- 类字节CLA -
ins
- 指令字节INS -
p1
- 参数字节P1 -
p2
- 参数字节P2 -
data
- 包含命令主体数据字节的字节数组 -
dataOffset
- 命令主体数据字节开始的字节数组中的偏移量 -
dataLength
- 命令主体中数据字节的数量 -
ne
- 响应APDU中预期数据字节的最大数量 - 抛出:
-
NullPointerException
- 如果数据为null且dataLength不为0 -
IllegalArgumentException
- 如果dataOffset或dataLength为负数,或者如果dataOffset + dataLength大于data.length,或者如果ne为负数或大于65536,或者如果dataLength大于65535
-
-
Method Details
-
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
返回此命令APDU的字符串表示形式。 -
equals
将指定对象与此命令APDU进行比较以检查是否相等。如果给定对象也是CommandAPDU并且其字节与此CommandAPDU中的字节相同,则返回true。 -
hashCode
public int hashCode()返回此命令APDU的哈希码值。
-