Spec-Zone.ru › OpenJDK 25

Класс CardChannel

java.lang.Object
javax.smartcardio.CardChannel
public abstract class CardChannel extends Object
Подключение логического канала к смарт-карте. Используется для обмена APDU со смарт-картой. Объект CardChannel можно получить, вызвав метод Card.getBasicChannel() или Card.openLogicalChannel().
С версии:
1.6
См. также:
  • Card
  • CommandAPDU
  • ResponseAPDU

Краткое описание конструкторов

CardChannel()
Модификатор Конструктор Описание
protected
Создает новый объект CardChannel.

Краткое описание методов

Модификатор и тип Метод Описание
abstract void close()
Закрывает этот CardChannel.
abstract Card getCard()
Возвращает Card, с которой связан этот канал.
abstract int getChannelNumber()
Возвращает номер канала этого CardChannel.
abstract int transmit(ByteBuffer command, ByteBuffer response)
Передает команду APDU, сохраненную в ByteBuffer команды, и получает ответ APDU в ByteBuffer ответа.
abstract ResponseAPDU transmit(CommandAPDU command)
Передает указанную команду APDU смарт-карте и возвращает ответ APDU.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

CardChannel

protected CardChannel()
Создает новый объект CardChannel.

Этот конструктор вызывается только подклассами. Для получения объекта CardChannel приложению следует вызывать методы Card.getBasicChannel() и Card.openLogicalChannel().

Подробное описание методов

getCard

public abstract Card getCard()
Возвращает Card, с которой связан этот канал.
Возвращает:
Card, с которой связан этот канал

getChannelNumber

public abstract int getChannelNumber()
Возвращает номер канала этого CardChannel. Номер канала 0 обозначает базовый логический канал.
Возвращает:
номер канала этого CardChannel.
Вызывает исключение:
IllegalStateException — если этот канал был закрыт или соответствующая Card была отключена.

transmit

public abstract ResponseAPDU transmit(CommandAPDU command) throws CardException
Передает указанную команду APDU смарт-карте и возвращает ответ APDU.

Байт CLA команды APDU автоматически корректируется в соответствии с номером канала этого CardChannel.

Обратите внимание, что этот метод нельзя использовать для передачи APDU MANAGE CHANNEL. Управлять логическими каналами следует с помощью методов Card.openLogicalChannel() и CardChannel.close().

Реализации должны прозрачно обрабатывать особенности протокола передачи. Например, при использовании протокола T=0 должна выполняться следующая обработка, описанная в ISO/IEC 7816-4:

  • если значение SW1 ответа APDU равно 61, реализация должна отправить команду GET RESPONSE, используя SW2 в качестве поля Le. Этот процесс повторяется, пока не будет получено значение SW1 61. Тело ответа этих обменов объединяется, образуя итоговое тело ответа.

  • если ответ APDU имеет значение 6C XX, реализация должна повторно отправить команду, используя XX в качестве поля Le.

Объект ResponseAPDU, возвращаемый этим методом, является результатом после выполнения этой обработки.

Параметры:
command — команда APDU
Возвращает:
ответ APDU, полученный от карты
Вызывает исключение:
IllegalStateException — если этот канал был закрыт или соответствующая Card была отключена.
IllegalArgumentException — если APDU кодирует команду MANAGE CHANNEL
NullPointerException — если значение command равно null
CardException — если операция с картой завершилась ошибкой

transmit

public abstract int transmit(ByteBuffer command, ByteBuffer response) throws CardException
Передает команду APDU, сохраненную в ByteBuffer команды, и получает ответ APDU в ByteBuffer ответа.

Буфер команды должен содержать корректные данные команды APDU, начиная с command.position(), а длина APDU должна составлять command.remaining() байт. После возврата позиция буфера команды будет равна его пределу; его предел не изменится. Выходной буфер будет содержать байты ответа APDU. Его позиция увеличится на число полученных байтов, которое также является возвращаемым значением этого метода.

Байт CLA команды APDU автоматически корректируется в соответствии с номером канала этого CardChannel.

Обратите внимание, что этот метод нельзя использовать для передачи APDU MANAGE CHANNEL. Управлять логическими каналами следует с помощью методов Card.openLogicalChannel() и CardChannel.close().

Обсуждение обработки ответов APDU со значениями SW1 61 или 6C см. в описании transmit().

Параметры:
command — буфер, содержащий команду APDU
response — буфер, в который должен быть записан ответ APDU от карты
Возвращает:
длина полученного ответа APDU
Вызывает исключение:
IllegalStateException — если этот канал был закрыт или соответствующая Card была отключена.
NullPointerException — если значение command или response равно null
ReadOnlyBufferException — если буфер ответа доступен только для чтения
IllegalArgumentException — если command и response являются одним и тем же объектом, если response может быть недостаточно места для получения ответа APDU или если APDU кодирует команду MANAGE CHANNEL
CardException — если операция с картой завершилась ошибкой

close

public abstract void close() throws CardException
Закрывает этот CardChannel. Логический канал закрывается путем отправки команды MANAGE CHANNEL, которая должна иметь формат [xx 70 80 0n], где n — номер этого канала, а xx — байт CLA, кодирующий этот логический канал, причем все остальные биты установлены в 0. После возврата этого метода вызов других методов этого класса приведет к возникновению IllegalStateException.

Обратите внимание, что базовый логический канал нельзя закрыть этим методом. Его можно закрыть, вызвав Card.disconnect(boolean).

Вызывает исключение:
CardException — если операция с картой завершилась ошибкой
IllegalStateException — если этот CardChannel представляет подключение к базовому логическому каналу

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.smartcardio/javax/smartcardio/CardChannel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API