- 自版本:
- 1.6
- 参见:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract voidclose()关闭此CardChannel。abstract CardgetCard()返回与此通道关联的智能卡。abstract int返回此CardChannel的通道号。abstract inttransmit(ByteBuffer command, ByteBuffer response) 传输存储在命令ByteBuffer中的命令APDU,并在响应ByteBuffer中接收响应APDU。abstract ResponseAPDUtransmit(CommandAPDU command) 传输指定的命令APDU到智能卡,并返回响应APDU。
-
Constructor Details
-
CardChannel
protected CardChannel()构造一个新的CardChannel对象。此构造方法仅由子类调用。应用程序应调用Card.getBasicChannel()和Card.openLogicalChannel()方法来获取CardChannel对象。
-
-
Method Details
-
getCard
返回与此通道关联的智能卡。- 返回:
- 与此通道关联的智能卡
-
getChannelNumber
public abstract int getChannelNumber()返回此CardChannel的通道号。通道号为0表示基本逻辑通道。- 返回:
- 此CardChannel的通道号。
- 抛出:
-
IllegalStateException- 如果此通道已被关闭或者对应的智能卡已被断开连接。
-
transmit
传输指定的命令APDU到智能卡,并返回响应APDU。命令APDU的CLA字节会自动调整以匹配此CardChannel的通道号。
请注意,此方法不能用于传输
MANAGE CHANNELAPDU。逻辑通道应该使用Card.openLogicalChannel()和CardChannel.close()方法进行管理。实现应该透明地处理传输协议的特性。例如,在使用T=0协议时,应按照ISO/IEC 7816-4中描述的进行以下处理:
-
如果响应APDU的SW1为
61,则实现应使用SW2作为Le字段发出GET RESPONSE命令。只要接收到61,就重复此过程。这些交换的响应体将连接在一起形成最终的响应体。 -
如果响应APDU为
6C XX,则实现应使用XX作为Le字段重新发出命令。
此方法返回的ResponseAPDU是在执行此处理后的结果。
- 参数:
-
command- 命令APDU - 返回:
- 从卡中接收到的响应APDU
- 抛出:
-
IllegalStateException- 如果此通道已被关闭或者对应的智能卡已被断开连接。 -
IllegalArgumentException- 如果APDU编码了MANAGE CHANNEL命令 -
NullPointerException- 如果command为null -
CardException- 如果卡操作失败
-
-
transmit
传输存储在命令ByteBuffer中的命令APDU,并在响应ByteBuffer中接收响应APDU。命令缓冲区必须包含从
command.position()开始的有效命令APDU数据,APDU必须为command.remaining()字节长。返回时,命令缓冲区的位置将等于其限制;其限制不会改变。输出缓冲区将接收到响应APDU字节。其位置将根据接收到的字节数前进,这也是此方法的返回值。命令APDU的CLA字节会自动调整以匹配此CardChannel的通道号。
请注意,此方法不能用于传输
MANAGE CHANNELAPDU。逻辑通道应该使用Card.openLogicalChannel()和CardChannel.close()方法进行管理。有关处理具有SW1值
61或6C的响应APDU的讨论,请参见transmit()。- 参数:
-
command- 包含命令APDU的缓冲区 -
response- 应从卡中接收响应APDU的缓冲区 - 返回:
- 接收到的响应APDU的长度
- 抛出:
-
IllegalStateException- 如果此通道已被关闭或者对应的智能卡已被断开连接。 -
NullPointerException- 如果command或response为null -
ReadOnlyBufferException- 如果响应缓冲区是只读的 -
IllegalArgumentException- 如果command和response是同一个对象,如果response可能没有足够的空间来接收响应APDU,或者如果APDU编码了MANAGE CHANNEL命令 -
CardException- 如果卡操作失败
-
close
关闭此CardChannel。通过发出应使用格式[xx 70 80 0n]的MANAGE CHANNEL命令来关闭逻辑通道,其中n是此通道的通道号,xx是编码此逻辑通道的CLA字节,所有其他位均设置为0。此方法返回后,调用此类中的其他方法将引发IllegalStateException。请注意,基本逻辑通道不能使用此方法关闭。可以通过调用
Card.disconnect(boolean)来关闭它。- 抛出:
-
CardException- 如果卡操作失败 -
IllegalStateException- 如果此CardChannel表示与基本逻辑通道的连接
-