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
- 参见:
-
构造方法总结
构造方法构造方法描述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) 从包含完整 APDU 内容(标头和主体)的 ByteBuffer 创建 CommandAPDU。 -
方法总结
修饰符和类型方法描述boolean
比较指定对象与此命令 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 的字符串表示形式。
-
构造方法详细信息
-
CommandAPDU
public CommandAPDU(byte[] apdu) 从包含完整 APDU 内容(标头和主体)的字节数组构造 CommandAPDU。请注意,复制 apdu 字节以防止后续修改。
- 参数:
apdu
- 完整的命令 APDU- 抛出:
NullPointerException
- 如果 apdu 为空IllegalArgumentException
- 如果 apdu 不包含有效命令 APDU
-
CommandAPDU
public CommandAPDU(byte[] apdu, int apduOffset, int apduLength) 从包含完整 APDU 内容(标头和主体)的字节数组构造 CommandAPDU。 APDU 从字节数组中的索引apduOffset
开始,长度为apduLength
字节。请注意,复制 apdu 字节以防止后续修改。
- 参数:
apdu
- 完整的命令 APDUapduOffset
- apdu 数据开始的字节数组中的偏移量apduLength
- APDU 的长度- 抛出:
NullPointerException
- 如果 apdu 为空IllegalArgumentException
- 如果 apduOffset 或 apduLength 为负,或者 apduOffset + apduLength 大于 apdu.length,或者指定的字节不是有效的 APDU
-
CommandAPDU
从包含完整 APDU 内容(标头和主体)的 ByteBuffer 创建 CommandAPDU。缓冲区的position
必须设置为 APDU 的开头,其limit
必须设置为 APDU 的结尾。返回时,缓冲区的position
等于其限制;它的限制保持不变。请注意,复制 ByteBuffer 中的数据以防止后续修改。
- 参数:
apdu
- 包含完整 APDU 的 ByteBuffer- 抛出:
NullPointerException
- 如果 apdu 为空IllegalArgumentException
- 如果 apdu 不包含有效命令 APDU
-
CommandAPDU
public CommandAPDU(int cla, int ins, int p1, int p2) 从四个标头字节构造一个 CommandAPDU。这是 ISO 7816 中的情况 1,没有命令体。- 参数:
cla
- 类字节 CLAins
- 指令字节 INSp1
——参数字节P1p2
——参数字节P2
-
CommandAPDU
public CommandAPDU(int cla, int ins, int p1, int p2, int ne) 从四个标头字节和预期的响应数据长度构造一个 CommandAPDU。这是 ISO 7816 中的情况 2,指定 Ne 的空命令数据字段。如果 Ne 为 0,则 APDU 编码为 ISO 7816 case 1。- 参数:
cla
- 类字节 CLAins
- 指令字节 INSp1
——参数字节P1p2
——参数字节P2ne
- 响应 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 case 1。请注意,复制数据字节是为了防止后续修改。
- 参数:
cla
- 类字节 CLAins
- 指令字节 INSp1
——参数字节P1p2
——参数字节P2data
- 包含命令主体数据字节的字节数组- 抛出:
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 case 1。请注意,复制数据字节是为了防止后续修改。
- 参数:
cla
- 类字节 CLAins
- 指令字节 INSp1
——参数字节P1p2
——参数字节P2data
- 包含命令主体数据字节的字节数组dataOffset
- 命令主体的数据字节开始的字节数组中的偏移量dataLength
- 命令体中的数据字节数- 抛出:
NullPointerException
- 如果数据为空且数据长度不为 0IllegalArgumentException
- 如果 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 编码为 case 1、2 或 3。请注意,复制数据字节是为了防止后续修改。
- 参数:
cla
- 类字节 CLAins
- 指令字节 INSp1
——参数字节P1p2
——参数字节P2data
- 包含命令主体数据字节的字节数组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 存在。 Nc 的值取为dataLength
。如果 Ne 或 Nc 为零,则根据 ISO 7816 将 APDU 编码为 case 1、2 或 3。请注意,复制数据字节是为了防止后续修改。
- 参数:
cla
- 类字节 CLAins
- 指令字节 INSp1
——参数字节P1p2
——参数字节P2data
- 包含命令主体数据字节的字节数组dataOffset
- 命令主体的数据字节开始的字节数组中的偏移量dataLength
- 命令体中的数据字节数ne
- 响应 APDU 中预期数据字节的最大数量- 抛出:
NullPointerException
- 如果数据为空且数据长度不为 0IllegalArgumentException
- 如果 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
返回此命令 APDU 的字符串表示形式。 -
equals
比较指定对象与此命令 APDU 是否相等。如果给定对象也是 CommandAPDU 并且其字节与此 CommandAPDU 中的字节相同,则返回 true。 -
hashCode
public int hashCode()返回此命令 APDU 的哈希码值。
-