Класс CardChannel
public abstract class CardChannel extends Object
- С версии:
- 1.6
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создает новый объект CardChannel. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
close() |
Закрывает этот CardChannel. |
abstract Card |
getCard() |
Возвращает Card, с которой связан этот канал. |
abstract int |
getChannelNumber() |
Возвращает номер канала этого CardChannel. |
abstract int |
transmit |
Передает команду APDU, сохраненную в ByteBuffer команды, и получает ответ APDU в ByteBuffer ответа. |
abstract ResponseAPDU |
transmit |
Передает указанную команду APDU смарт-карте и возвращает ответ APDU. |
Подробное описание конструкторов
CardChannel
protected CardChannel()
Этот конструктор вызывается только подклассами. Для получения объекта CardChannel приложению следует вызывать методы Card.getBasicChannel() и Card.openLogicalChannel().
Подробное описание методов
getCard
public abstract Card getCard()
- Возвращает:
- Card, с которой связан этот канал
getChannelNumber
public abstract int getChannelNumber()
- Возвращает:
- номер канала этого CardChannel.
- Вызывает исключение:
-
IllegalStateException— если этот канал был закрыт или соответствующая Card была отключена.
transmit
public abstract ResponseAPDU transmit(CommandAPDU command) throws CardException
Байт CLA команды APDU автоматически корректируется в соответствии с номером канала этого CardChannel.
Обратите внимание, что этот метод нельзя использовать для передачи APDU MANAGE CHANNEL. Управлять логическими каналами следует с помощью методов Card.openLogicalChannel() и CardChannel.close().
Реализации должны прозрачно обрабатывать особенности протокола передачи. Например, при использовании протокола T=0 должна выполняться следующая обработка, описанная в ISO/IEC 7816-4:
если значение SW1 ответа APDU равно
61, реализация должна отправить командуGET RESPONSE, используяSW2в качестве поляLe. Этот процесс повторяется, пока не будет получено значение SW161. Тело ответа этих обменов объединяется, образуя итоговое тело ответа.если ответ 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, начиная с 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
MANAGE CHANNEL, которая должна иметь формат [xx 70 80 0n], где n — номер этого канала, а xx — байт CLA, кодирующий этот логический канал, причем все остальные биты установлены в 0. После возврата этого метода вызов других методов этого класса приведет к возникновению IllegalStateException. Обратите внимание, что базовый логический канал нельзя закрыть этим методом. Его можно закрыть, вызвав Card.disconnect(boolean).
- Вызывает исключение:
-
CardException— если операция с картой завершилась ошибкой -
IllegalStateException— если этот CardChannel представляет подключение к базовому логическому каналу
© 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