Класс DatagramChannel
- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.SelectableChannel
-
- java.nio.channels.spi.AbstractSelectableChannel
-
- java.nio.channels.DatagramChannel
- Все реализованные интерфейсы:
- Closeable, AutoCloseable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, MulticastChannel, NetworkChannel, ReadableByteChannel, ScatteringByteChannel, WritableByteChannel
public abstract class DatagramChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, MulticastChannel
Выбираемый канал для сокетов, ориентированных на дейтаграммы.
Канал дейтаграмм создается путем вызова одного из методов open этого класса. Невозможно создать канал для произвольного, уже существующего сокета дейтаграмм. Недавно созданный канал дейтаграмм открыт, но не подключен. Для использования методов send и receive не требуется подключение канала дейтаграмм. Для избежания накладных расходов проверки безопасности, которые в противном случае выполняются как часть каждой операции отправки и получения, канал дейтаграмм можно подключить, вызвав его метод connect. Для использования методов read и write канал дейтаграмм должен быть подключен, поскольку эти методы не принимают и не возвращают адреса сокетов.
После подключения канал дейтаграмм остается подключенным до его отключения или закрытия. Подключение канала дейтаграмм можно определить, вызвав его метод isConnected.
Параметры сокета настраиваются с помощью метода setOption. Канал дейтаграмм для сокета протокола Internet поддерживает следующие параметры:
| Имя параметра | Описание |
|---|---|
SO_SNDBUF | Размер буфера отправки сокета |
SO_RCVBUF | Размер буфера приема сокета |
SO_REUSEADDR | Повторное использование адреса |
SO_BROADCAST | Разрешить передачу широковещательных дейтаграмм |
IP_TOS | Октава типа сервиса (ToS) в заголовке протокола Internet (IP) |
IP_MULTICAST_IF | Сетевой интерфейс для дейтаграмм интернет-протокола (IP) multicast |
IP_MULTICAST_TTL | Время жизни для дейтаграмм интернет-протокола (IP) multicast |
IP_MULTICAST_LOOP | Возврат для дейтаграмм интернет-протокола (IP) multicast |
Канал дейтаграмм безопасен для использования несколькими конкурирующими потоками. Он поддерживает одновременное чтение и запись, хотя не более одного потока может читать, и не более одного потока может записывать в данный момент.
- С тех пор:
- 1.4
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
DatagramChannel(SelectorProvider provider) Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
abstract DatagramChannel |
bind(SocketAddress local) Привязывает сокет канала к локальному адресу. |
abstract DatagramChannel |
connect(SocketAddress remote) Подключает сокет этого канала. |
abstract DatagramChannel |
disconnect() Отключает сокет этого канала. |
abstract SocketAddress |
getLocalAddress() Возвращает адрес сокета, к которому привязан сокет этого канала. |
abstract SocketAddress |
getRemoteAddress() Возвращает удаленный адрес, к которому подключен сокет этого канала. |
abstract boolean |
isConnected() Указывает, подключен ли сокет этого канала. |
static DatagramChannel |
open() Открывает канал дейтаграмм. |
static DatagramChannel |
open(ProtocolFamily family) Открывает канал дейтаграмм. |
abstract int |
read(ByteBuffer dst) Читает дейтаграмму из этого канала. |
long |
read(ByteBuffer[] dsts) Читает дейтаграмму из этого канала. |
abstract long |
read(ByteBuffer[] dsts,
int offset,
int length) Читает дейтаграмму из этого канала. |
abstract SocketAddress |
receive(ByteBuffer dst) Принимает дейтаграмму через этот канал. |
abstract int |
send(ByteBuffer src,
SocketAddress target) Отправляет дейтаграмму через этот канал. |
abstract <T> DatagramChannel |
setOption(SocketOption<T> name,
T value) Устанавливает значение параметра сокета. |
abstract DatagramSocket |
socket() Возвращает сокет дейтаграмм, связанный с этим каналом. |
int |
validOps() Возвращает набор операций, определяющий поддерживаемые операции этого канала. |
abstract int |
write(ByteBuffer src) Записывает дейтаграмму в этот канал. |
long |
write(ByteBuffer[] srcs) Записывает дейтаграмму в этот канал. |
abstract long |
write(ByteBuffer[] srcs,
int offset,
int length) Записывает дейтаграмму в этот канал. |
Методы, унаследованные от класса java.nio.channels.spi.AbstractSelectableChannel
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register Методы, унаследованные от класса java.nio.channels.SelectableChannel
register Методы, унаследованные от класса java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, isOpen Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, унаследованные от интерфейса java.nio.channels.MulticastChannel
close, join, join Методы, унаследованные от интерфейса java.nio.channels.NetworkChannel
getOption, supportedOptions Методы, унаследованные от интерфейса java.nio.channels.Channel
isOpen Конструкторы
DatagramChannel
protected DatagramChannel(SelectorProvider provider)
Инициализирует новый экземпляр этого класса.
- Параметры:
-
provider- Поставщик, создавший этот канал
Методы
open
public static DatagramChannel open()
throws IOException Открывает канал данных дейтаграммы.
Новый канал создается путём вызова метода openDatagramChannel системного по умолчанию объекта SelectorProvider. Канал не будет подключен.
Семейство протоколов ProtocolFamily сокета канала зависит от платформы (и, возможно, конфигурации), поэтому не определено. Метод open позволяет выбрать семейство протоколов при открытии канала данных дейтаграммы и должен использоваться для открытия каналов данных дейтаграммы, предназначенных для интернет-протокольного многоадресного вещания.
- Возвращает:
- Новый канал данных дейтаграммы
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода
open
public static DatagramChannel open(ProtocolFamily family)
throws IOException Открывает канал данных дейтаграммы.
Параметр family используется для указания семейства протоколов ProtocolFamily. Если канал данных дейтаграммы предназначен для многоадресного вещания IP, то он должен соответствовать типу адреса многоадресных групп, к которым присоединится этот канал.
Новый канал создается путём вызова метода openDatagramChannel системного по умолчанию объекта SelectorProvider. Канал не будет подключен.
- Параметры:
-
family- Семейство протоколов - Возвращает:
- Новый канал данных дейтаграммы
- Исключения:
-
UnsupportedOperationException- Если указанное семейство протоколов не поддерживается. Например, предположим, что параметр указан какStandardProtocolFamily.INET6, но IPv6 не включен на платформе. -
IOException- Если произошла ошибка ввода-вывода - С тех пор как:
- 1.7
validOps
public final int validOps()
Возвращает набор операций, определяющий поддерживаемые операции этого канала.
Каналы данных дейтаграммы поддерживают чтение и запись, поэтому этот метод возвращает (SelectionKey.OP_READ | SelectionKey.OP_WRITE).
- Определено в:
-
validOpsв классеSelectableChannel - Возвращает:
- Набор допустимых операций
bind
public abstract DatagramChannel bind(SocketAddress local)
throws IOException Описание скопировано из интерфейса: NetworkChannel
Привязывает сокет канала к локальному адресу.
Этот метод используется для установления связи между сокетом и локальным адресом. После установления связи сокет остается привязанным до закрытия канала. Если параметр local имеет значение null, то сокет будет привязан к автоматически назначенному адресу.
- Определено в:
-
bindв интерфейсеNetworkChannel - Параметры:
-
local- Адрес для привязки сокета, илиnullдля привязки сокета к автоматически назначенному адресу сокета - Возвращает:
- Этот канал
- Исключения:
-
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип данного адреса не поддерживается -
ClosedChannelException- Если канал закрыт -
IOException- Если произошла какая-либо другая ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и его методcheckListenотклоняет операцию - С тех пор как:
- 1.7
- См. также:
NetworkChannel.getLocalAddress()
setOption
public abstract <T> DatagramChannel setOption(SocketOption<T> name,
T value)
throws IOException Описание скопировано из интерфейса: NetworkChannel
Устанавливает значение параметра сокета.
- Определено в:
-
setOptionв интерфейсеNetworkChannel - Параметры типа:
-
T- Тип значения параметра сокета - Параметры:
-
name- Параметр сокета -
value- Значение параметра сокета. Значениеnullможет быть допустимым значением для некоторых параметров сокета. - Возвращает:
- Этот канал
- Исключения:
-
UnsupportedOperationException- Если параметр сокета не поддерживается этим каналом -
IllegalArgumentException- Если значение не является допустимым значением для этого параметра сокета -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода - С тех пор как:
- 1.7
- См. также:
StandardSocketOptions
socket
public abstract DatagramSocket socket()
Возвращает сокет дейтаграммы, связанный с этим каналом.
Возвращаемый объект не будет объявлять какие-либо публичные методы, которые не объявлены в классе DatagramSocket.
- Возвращает:
- Сокет дейтаграммы, связанный с этим каналом
isConnected
public abstract boolean isConnected()
Определяет, подключен ли сокет этого канала.
- Возвращает:
-
trueесли и только если сокет этого каналаopenи подключен
connect
public abstract DatagramChannel connect(SocketAddress remote)
throws IOException Подключает сокет этого канала.
Сокет канала настроен таким образом, что он только получает дейтаграммы от и отправляет дейтаграммы на указанный удаленный адрес партнера. После подключения дейтаграммы не могут быть получены или отправлены на какой-либо другой адрес. Сокет дейтаграммы остается подключенным до его явного отключения или закрытия.
Этот метод выполняет точно такие же проверки безопасности, как метод connect класса DatagramSocket. То есть, если установлен менеджер безопасности, то этот метод проверяет, разрешает ли его метод checkAccept и checkConnect получение дейтаграмм от и отправку дейтаграмм соответственно на указанный удалённый адрес.
Этот метод может быть вызван в любое время. Он не повлияет на операции чтения или записи, которые уже выполняются в момент его вызова. Если сокет этого канала не привязан, то этот метод сначала привяжет сокет к автоматически назначенному адресу, как если бы был вызван метод bind с параметром null.
- Параметры:
-
remote- Удалённый адрес, к которому должен быть подключен этот канал - Возвращает:
- Этот канал данных дейтаграммы
- Исключения:
-
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал, пока операция подключения находится в процессе -
ClosedByInterruptException- Если другой поток прерывает текущий поток, пока операция подключения находится в процессе, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
SecurityException- Если установлен менеджер безопасности и он не разрешает доступ к данному удалённому адресу -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
disconnect
public abstract DatagramChannel disconnect()
throws IOException Отключает сокет этого канала.
Сокет канала настроен так, что он может принимать дейтаграммы от и отправлять дейтаграммы на любой удаленный адрес, если только менеджер безопасности, если он установлен, разрешает это.
Этот метод может быть вызван в любое время. Он не повлияет на операции чтения или записи, которые уже выполняются в момент его вызова.
Если сокет этого канала не подключен или канал закрыт, то вызов этого метода не окажет никакого эффекта.
- Возвращает:
- Этот канал данных дейтаграммы
- Исключения:
-
IOException- Если произошла какая-либо другая ошибка ввода-вывода
getRemoteAddress
public abstract SocketAddress getRemoteAddress()
throws IOException Возвращает удаленный адрес, к которому подключен сокет этого канала.
- Возвращает:
- Удаленный адрес;
nullесли сокет канала не подключен - Исключения:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода - С тех пор как:
- 1.7
receive
public abstract SocketAddress receive(ByteBuffer dst)
throws IOException Принимает датаграмму через этот канал.
Если датаграмма немедленно доступна или если этот канал находится в режиме блокировки и датаграмма в конечном итоге становится доступной, то датаграмма копируется в заданный буфер байтов, и возвращается адрес её отправителя. Если этот канал находится в режиме без блокировки и датаграмма немедленно недоступна, то этот метод немедленно возвращает null.
Датаграмма передается в заданный буфер байтов начиная с его текущей позиции, как если бы выполнялась обычная операция read. Если в буфере остаётся меньше байтов, чем требуется для хранения датаграммы, то оставшаяся часть датаграммы молча отбрасывается.
Этот метод выполняет точно те же проверки безопасности, что и метод receive класса DatagramSocket. То есть, если сокет не подключён к определённому удалённому адресу и установлен менеджер безопасности, то для каждой полученной датаграммы этот метод проверяет, разрешает ли менеджер безопасности адрес и порт отправителя с помощью метода checkAccept. Накладные расходы на эту проверку безопасности можно избежать, предварительно подключив сокет с помощью метода connect.
Этот метод можно вызывать в любое время. Однако, если другой поток уже начал операцию чтения на этом канале, то вызов этого метода заблокирует поток до завершения первой операции. Если сокет этого канала не привязан, то этот метод сначала привяжет сокет к автоматически назначенному адресу, как если бы был вызван метод bind с параметром null.
- Параметры:
-
dst- Буфер, в который будет передана датаграмма - Возвращает:
- Адрес отправителя датаграммы или
nullесли этот канал находится в режиме без блокировки и датаграмма не была немедленно доступна - Исключение:
-
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
SecurityException- Если установлен менеджер безопасности, и он не разрешает принятие датаграмм от отправителя -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
send
public abstract int send(ByteBuffer src,
SocketAddress target)
throws IOException Отправляет датаграмму через этот канал.
Если этот канал находится в режиме без блокировки и в базовом буфере вывода достаточно места, или если этот канал находится в режиме блокировки и достаточное место становится доступным, то оставшиеся байты в заданном буфере передаются в виде одной датаграммы заданному целевому адресу.
Датаграмма передается из буфера байтов, как при обычной операции write.
Этот метод выполняет точно те же проверки безопасности, что и метод send класса DatagramSocket. То есть, если сокет не подключён к определённому удалённому адресу и установлен менеджер безопасности, то для каждой отправленной датаграммы этот метод проверяет, разрешает ли менеджер безопасности целевой адрес и порт с помощью метода checkConnect. Накладные расходы на эту проверку безопасности можно избежать, предварительно подключив сокет с помощью метода connect.
Этот метод можно вызывать в любое время. Однако, если другой поток уже инициировал операцию записи на этот канал, то вызов этого метода заблокирует поток до завершения первой операции. Если сокет этого канала не привязан, то этот метод сначала привяжет сокет к автоматически назначенному адресу, как если бы был вызван метод bind с параметром null.
- Параметры:
-
src- Буфер, содержащий датаграмму для отправки -
target- Адрес, по которому должна быть отправлена датаграмма - Возвращает:
- Количество отправленных байтов, которое будет либо количеством байтов, оставшихся в исходном буфере при вызове этого метода, либо, если этот канал неблокирующий, может быть нулём, если в базовом буфере вывода не было достаточно места для датаграммы
- Исключение:
-
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
SecurityException- Если установлен менеджер безопасности, и он не разрешает отправку датаграмм на данный адрес -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
read
public abstract int read(ByteBuffer dst)
throws IOException Читает датаграмму из этого канала.
Этот метод может быть вызван только если сокет этого канала подключен, и он принимает только датаграммы от сокета-партнера. Если в датаграмме больше байтов, чем осталось в заданном буфере, то оставшаяся часть датаграммы молча отбрасывается. В противном случае этот метод ведет себя точно так же, как указано в интерфейсе ReadableByteChannel.
- Указано в:
-
readв интерфейсеReadableByteChannel - Параметры:
-
dst- Буфер, в который будут переданы байты - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1если канал достиг конца потока - Исключение:
-
NotYetConnectedException- Если сокет этого канала не подключен -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
read
public abstract long read(ByteBuffer[] dsts,
int offset,
int length)
throws IOException Читает датаграмму из этого канала.
Этот метод может быть вызван только если сокет этого канала подключен, и он принимает только датаграммы от сокета-партнера. Если в датаграмме больше байтов, чем осталось в заданных буферах, то оставшаяся часть датаграммы молча отбрасывается. В противном случае этот метод ведет себя точно так же, как указано в интерфейсе ScatteringByteChannel.
- Указано в:
-
readв интерфейсеScatteringByteChannel - Параметры:
-
dsts- Буферы, в которые будут переданы байты -
offset- Смещение в массиве буферов первого буфера, в который будут переданы байты; должно быть неотрицательным и не большеdsts.length -
length- Максимальное количество буферов для доступа; должно быть неотрицательным и не большеdsts.length-offset - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1если канал достиг конца потока - Исключение:
-
NotYetConnectedException- Если сокет этого канала не подключен -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
read
public final long read(ByteBuffer[] dsts)
throws IOException Читает датаграмму из этого канала.
Этот метод может быть вызван только если сокет этого канала подключен, и он принимает только датаграммы от сокета-партнера. Если в датаграмме больше байтов, чем осталось в заданных буферах, то оставшаяся часть датаграммы молча отбрасывается. В противном случае этот метод ведет себя точно так же, как указано в интерфейсе ScatteringByteChannel.
- Указано в:
-
readв интерфейсеScatteringByteChannel - Параметры:
-
dsts- Буферы, в которые будут переданы байты - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1если канал достиг конца потока - Исключение:
-
NotYetConnectedException- Если сокет этого канала не подключен -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
write
public abstract int write(ByteBuffer src)
throws IOException Записывает датаграмму в этот канал.
Этот метод может быть вызван только если сокет этого канала подключен, в этом случае он отправляет датаграммы непосредственно партнеру сокета. В противном случае он ведет себя точно так же, как указано в интерфейсе WritableByteChannel.
- Указано в:
-
writeв интерфейсеWritableByteChannel - Параметры:
-
src- Буфер, из которого должны быть извлечены байты - Возвращает:
- Количество записанных байтов, возможно ноль
- Выбрасывает:
-
NotYetConnectedException- Если сокет данного канала не подключен -
ClosedChannelException- Если канал закрыт -
AsynchronousCloseException- Если другой поток закрывает данный канал во время операции записи -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время операции записи, тем самым закрывая канал и устанавливая флаг прерывания текущего потока -
IOException- Если произошла другая ошибка ввода-вывода
write
public abstract long write(ByteBuffer[] srcs,
int offset,
int length)
throws IOException Записывает дейтаграмму в данный канал.
Этот метод может быть вызван только если сокет данного канала подключен, в этом случае он отправляет дейтаграммы непосредственно целевому сокету. В противном случае он ведет себя точно так же, как и указано в интерфейсе GatheringByteChannel.
- Указано в:
-
writeв интерфейсеGatheringByteChannel - Параметры:
-
srcs- Буферы, из которых необходимо извлечь байты -
offset- Смещение в массиве буферов первого буфера, из которого необходимо извлечь байты; должно быть неотрицательным и не превышатьsrcs.length -
length- Максимальное количество буферов для доступа; должно быть неотрицательным и не превышатьsrcs.length-offset - Возвращает:
- Количество отправленных байтов, которое будет равно либо количеству оставшихся байтов в исходном буфере на момент вызова этого метода, либо, если канал неблокирующий, может быть равно нулю, если для дейтаграммы не было достаточно места в буфере вывода
- Выбрасывает:
-
NotYetConnectedException- Если сокет данного канала не подключен -
ClosedChannelException- Если канал закрыт -
AsynchronousCloseException- Если другой поток закрывает данный канал во время операции записи -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время операции записи, тем самым закрывая канал и устанавливая флаг прерывания текущего потока -
IOException- Если произошла другая ошибка ввода-вывода
write
public final long write(ByteBuffer[] srcs)
throws IOException Записывает дейтаграмму в данный канал.
Этот метод может быть вызван только если сокет данного канала подключен, в этом случае он отправляет дейтаграммы непосредственно целевому сокету. В противном случае он ведет себя точно так же, как и указано в интерфейсе GatheringByteChannel.
- Указано в:
-
writeв интерфейсеGatheringByteChannel - Параметры:
-
srcs- Буферы, из которых необходимо извлечь байты - Возвращает:
- Количество отправленных байтов, которое будет равно либо количеству оставшихся байтов в исходном буфере на момент вызова этого метода, либо, если канал неблокирующий, может быть равно нулю, если для дейтаграммы не было достаточно места в буфере вывода
- Выбрасывает:
-
NotYetConnectedException- Если сокет данного канала не подключен -
ClosedChannelException- Если канал закрыт -
AsynchronousCloseException- Если другой поток закрывает данный канал во время операции записи -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время операции записи, тем самым закрывая канал и устанавливая флаг прерывания текущего потока -
IOException- Если произошла другая ошибка ввода-вывода
getLocalAddress
public abstract SocketAddress getLocalAddress()
throws IOException Возвращает адрес сокета, к которому привязан сокет данного канала.
Если канал привязан к адресу сокета протокола интернета, то возвращаемое значение этого метода является объектом типа InetSocketAddress.
Если установлен менеджер безопасности, то его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы определить, разрешена ли операция. Если операция не разрешена, возвращается объект SocketAddress представляющий loopback адрес и локальный порт сокета канала.
- Указано в:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
- Адрес, к которому привязан сокет, или объект
SocketAddressпредставляющий адрес обратной связи, если доступ запрещен менеджером безопасности, илиnullесли сокет канала не привязан - Выбрасывает:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода
© 1993, 2020, 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.