Module  java.smartcardio
软件包  javax.smartcardio

Class 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 CHANNEL APDU。 逻辑通道应使用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 CHANNEL APDU。 逻辑通道应使用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表示连接的基本逻辑信道