- java.lang.Object
-
- javax.smartcardio.CommandAPDU
-
- All Implemented Interfaces:
-
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
-
-
构造方法摘要
构造方法 Constructor 描述 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。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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
为空 -
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
为空 -
IllegalArgumentException
- 如果apduOffset或apduLength为负值,或者如果apduOffset + apduLength大于apdu.length,或者指定的字节不是有效的APDU
-
CommandAPDU
public CommandAPDU(ByteBuffer apdu)
从包含完整的APDU内容(标题和正文)的ByteBuffer创建一个CommandAPDU。 缓冲区的position
必须设置为APDU的开始,其limit
到APDU的结尾。 返回时,缓冲区的position
等于其限制; 其限制保持不变。请注意,ByteBuffer中的数据被复制以防止后续修改。
- 参数
-
apdu
- 包含完整APDU的ByteBuffer - 异常
-
NullPointerException
- 如果NullPointerException
为空 -
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
- 如果数据为空,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为零,则APDU被编码为根据ISO 7816的情况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存在。 值Nc取为dataLength
。 如果Ne或Nc为零,则APDU被编码为根据ISO 7816的情况1,2或3。请注意,数据字节被复制以防止后续修改。
- 参数
-
cla
- 类字节CLA -
ins
- 指令字节INS -
p1
- 参数字节P1 -
p2
- 参数字节P2 -
data
- 包含命令体数据字节的字节数组 -
dataOffset
- 指令体数据字节开始的字节数组中的偏移量 -
dataLength
- 命令体中的数据字节数 -
ne
- 响应APDU中预期数据字节的最大数目 - 异常
-
NullPointerException
- 如果数据为空,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没有body,这个方法返回一个长度为零的字节数组。- 结果
- 命令体中的数据字节的副本或空字节数组,如果该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)
-
-