- 自版本:
- 1.6
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
close()
关闭此CardChannel。abstract Card
getCard()
返回与此通道关联的智能卡。abstract int
返回此CardChannel的通道号。abstract int
transmit
(ByteBuffer command, ByteBuffer response) 传输存储在命令ByteBuffer中的命令APDU,并在响应ByteBuffer中接收响应APDU。abstract ResponseAPDU
transmit
(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 CHANNEL
APDU。逻辑通道应该使用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 CHANNEL
APDU。逻辑通道应该使用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表示与基本逻辑通道的连接
-