- java.lang.Object
-
- javax.smartcardio.CardChannel
-
public abstract class CardChannel extends Object
- 从以下版本开始:
- 1.6
- 另请参见:
-
Card,CommandAPDU,ResponseAPDU
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protectedCardChannel()构造一个新的CardChannel对象。
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract voidclose()关闭这个CardChannel。abstract CardgetCard()返回此频道关联的卡。abstract intgetChannelNumber()返回此CardChannel的频道号。abstract inttransmit(ByteBuffer command, ByteBuffer response)发送存储在命令ByteBuffer中的命令APDU,并在响应ByteBuffer中接收响应APDU。abstract ResponseAPDUtransmit(CommandAPDU command)将指定的命令APDU发送到智能卡,并返回响应APDU。
-
-
-
构造方法详细信息
-
CardChannel
protected CardChannel()
构造一个新的CardChannel对象。此构造函数仅由子类调用。 应用程序应调用Card.getBasicChannel()和Card.openLogicalChannel()方法来获取CardChannel对象。
-
-
方法详细信息
-
getCard
public abstract Card getCard()
返回此频道关联的卡。- 结果
- 该频道与该频道相关联
-
getChannelNumber
public abstract int getChannelNumber()
返回此CardChannel的频道号。 通道号0表示基本逻辑通道。- 结果
- 这个CardChannel的频道号码。
- 异常
-
IllegalStateException- 如果该频道已经是 closed,或者对应的卡已经是 disconnected 。
-
transmit
public abstract ResponseAPDU transmit(CommandAPDU command) throws CardException
将指定的命令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的SW1,就重复该过程。 这些交流的响应机构连接起来形成最终的反应机构。如果响应APDU为
6C XX,则应使用XX作为Le字段重新XX命令。
此方法返回的ResponseAPDU是执行此处理后的结果。
- 参数
-
command- 命令APDU - 结果
- 从卡接收的响应APDU
- 异常
-
IllegalStateException- 如果该频道已经是 closed,或者对应的卡已经是 disconnected 。 -
IllegalArgumentException- 如果APDU编码一个MANAGE CHANNEL命令 -
NullPointerException- 如果命令为空 -
CardException- 如果卡操作失败
-
transmit
public abstract int transmit(ByteBuffer command, ByteBuffer response) throws CardException
发送存储在命令ByteBuffer中的命令APDU,并在响应ByteBuffer中接收响应APDU。命令缓冲区必须包含从
command.position()开始的有效命令APDU数据,APDU长度必须为command.remaining()字节。 返回时,命令缓冲区的位置将等于其限制; 其限制将不会改变。 输出缓冲区将收到响应APDU字节。 它的位置将通过接收的字节数提高,这也是此方法的返回值。自动调整命令APDU的CLA字节以匹配此CardChannel的通道号。
请注意,此方法不能用于传送
MANAGE CHANNELAPDU。 逻辑通道应使用Card.openLogicalChannel()和CardChannel.close()方法进行管理。见transmit()为响应APDU进行处理的讨论与SW1值
61或者6C。- 参数
-
command- 包含命令APDU的缓冲区 -
response- 从卡接收响应APDU的缓冲区 - 结果
- 接收到的响应APDU的长度
- 异常
-
IllegalStateException- 如果该频道已经是 closed,或者对应的卡已经是 disconnected 。 -
NullPointerException- 如果命令或响应为空 -
ReadOnlyBufferException- 如果响应缓冲区是只读的 -
IllegalArgumentException- 如果命令和响应是相同的对象,如果response可能没有足够的空间来接收响应APDU,或者如果APDU编码一个MANAGE CHANNEL命令 -
CardException- 如果卡操作失败
-
close
public abstract void close() throws CardException关闭这个CardChannel。 通过发出MANAGE CHANNEL命令来关闭逻辑信道,该命令应使用格式[xx 70 80 0n],其中n是该信道的信道号,xx是编码该逻辑信道并且所有其他位设置为0的CLA字节。该方法返回后,在这个类中调用其他方法会引发一个IllegalStateException。请注意,使用此方法无法关闭基本逻辑通道。 可以通过拨打
Card.disconnect(boolean)关闭它。- 异常
-
CardException- 如果卡操作失败 -
IllegalStateException- 如果这个CardChannel表示连接的基本逻辑信道
-
-