- java.lang.Object
-  
      - javax.smartcardio.CardChannel
 
-  
       
 public abstract class CardChannel extends Object 与智能卡的逻辑通道连接。 它用于与智能卡交换APDU。 可以通过调用方法Card.getBasicChannel()或Card.openLogicalChannel()来获得CardChannel对象。- 从以下版本开始:
- 1.6
- 另请参见:
-  
         Card,CommandAPDU,ResponseAPDU
 
-  
        
       -  
             构造方法摘要构造方法 变量 构造器 描述 protectedCardChannel()构造一个新的CardChannel对象。
 -  
             方法摘要所有方法 实例方法 抽象方法 变量和类型 方法 描述 abstract voidclose()关闭此CardChannel。abstract CardgetCard()返回与此频道关联的卡片。abstract intgetChannelNumber()返回此CardChannel的通道编号。abstract inttransmit(ByteBuffer command, ByteBuffer response)传输存储在命令ByteBuffer中的命令APDU,并在响应ByteBuffer中接收响应APDU。abstract ResponseAPDUtransmit(CommandAPDU command)将指定的命令APDU发送到智能卡并返回响应APDU。
 
-  
             
-  
        
       -  
             构造方法详细信息-  CardChannelprotected CardChannel() 构造一个新的CardChannel对象。此构造函数仅由子类调用。 应用程序应调用Card.getBasicChannel()和Card.openLogicalChannel()方法以获取CardChannel对象。 
 
-  
 -  
             方法详细信息-  getCardpublic abstract Card getCard() 返回与此频道关联的卡片。- 结果
- 此频道与之关联的卡片
 
 -  getChannelNumberpublic abstract int getChannelNumber() 返回此CardChannel的通道编号。 通道号0表示基本逻辑通道。- 结果
- 此CardChannel的频道号。
- 异常
-  
              IllegalStateException- 如果此频道是 closed或相应的卡是 disconnected 。
 
 -  transmitpublic 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- 如果command为null
-  
              CardException- 如果卡操作失败
 
 -  transmitpublic 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- 如果卡操作失败
 
 -  closepublic abstract void close() throws CardException关闭此CardChannel。 通过发出MANAGE CHANNEL命令关闭逻辑通道,该命令应使用格式[xx 70 80 0n],其中n是此通道的通道编号,xx是编码此逻辑通道的CLA字节,并且所有其他位设置为0.此方法返回后,调用此类中的其他方法将引发IllegalStateException。请注意,使用此方法无法关闭基本逻辑通道。 可致电 Card.disconnect(boolean)关闭。- 异常
-  
              CardException- 如果卡操作失败
-  
              IllegalStateException- 如果此CardChannel表示基本逻辑信道的连接
 
 
-  
 
-