java.lang.Object | ||||
↳ | java.nio.channels.spi.AbstractInterruptibleChannel | |||
↳ | java.nio.channels.SelectableChannel | |||
↳ | java.nio.channels.spi.AbstractSelectableChannel | |||
↳ | java.nio.channels.DatagramChannel |
A DatagramChannel
is a selectable channel that represents a partial
abstraction of a datagram socket. The socket
method of this class can
return the related DatagramSocket
instance, which can handle the
socket.
A datagram channel is open but not connected when created with the
open()
method. After it is connected, it will keep the connected
status until it is disconnected or closed. The benefit of a connected channel
is the reduced effort of security checks during send and receive. When
invoking read
or write
, a connected channel is required.
Datagram channels are thread-safe; only one thread can read or write at the same time.
Protected Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Constructs a new
DatagramChannel . |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Connects the socket of this channel to a remote address, which is the
only communication peer for getting and sending datagrams after being
connected.
| |||||||||||
Disconnects the socket of this channel, which has been connected before
in order to send and receive datagrams.
| |||||||||||
Returns whether this channel's socket is connected or not.
| |||||||||||
Creates an opened and not-connected datagram channel.
| |||||||||||
Reads a datagram from this channel into an array of byte buffers.
| |||||||||||
Reads a datagram from this channel into the byte buffer.
| |||||||||||
Reads a datagram from this channel into an array of byte buffers.
| |||||||||||
Gets a datagram from this channel.
| |||||||||||
Sends a datagram through this channel.
| |||||||||||
Returns the related datagram socket of this channel, which does not
define additional public methods to those defined by
DatagramSocket . | |||||||||||
Gets the valid operations of this channel.
| |||||||||||
Writes a datagram from the byte buffers to this channel.
| |||||||||||
Writes a datagram from the byte buffers to this channel.
| |||||||||||
Writes a datagram from the byte buffer to this channel.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class java.nio.channels.spi.AbstractSelectableChannel
| |||||||||||
From class java.nio.channels.SelectableChannel
| |||||||||||
From class java.nio.channels.spi.AbstractInterruptibleChannel
| |||||||||||
From class java.lang.Object
| |||||||||||
From interface java.io.Closeable
| |||||||||||
From interface java.nio.channels.Channel
| |||||||||||
From interface java.nio.channels.GatheringByteChannel
| |||||||||||
From interface java.nio.channels.InterruptibleChannel
| |||||||||||
From interface java.nio.channels.ReadableByteChannel
| |||||||||||
From interface java.nio.channels.ScatteringByteChannel
| |||||||||||
From interface java.nio.channels.WritableByteChannel
|
Constructs a new DatagramChannel
.
selectorProvider | an instance of SelectorProvider. |
---|
Connects the socket of this channel to a remote address, which is the only communication peer for getting and sending datagrams after being connected.
This method can be called at any time without affecting the read and write operations being processed at the time the method is called. The connection status does not change until the channel is disconnected or closed.
This method executes the same security checks as the connect method of
the DatagramSocket
class.
address | the address to be connected to. |
---|
ClosedChannelException | if the channel is already closed. |
---|---|
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
SecurityException | if there is a security manager, and the address is not permitted to be accessed. |
IOException | if some other I/O error occurrs. |
Disconnects the socket of this channel, which has been connected before in order to send and receive datagrams.
This method can be called at any time without affecting the read and write operations being underway. It does not have any effect if the socket is not connected or the channel is closed.
IOException | some other I/O error occurs. |
---|
Returns whether this channel's socket is connected or not.
true
if this channel's socket is connected;
false
otherwise.
Creates an opened and not-connected datagram channel.
This channel is created by calling the openDatagramChannel
method of the default SelectorProvider
instance.
IOException | if some I/O error occurs. |
---|
Reads a datagram from this channel into an array of byte buffers.
The precondition for calling this method is that the channel is connected
and the incoming datagram is from the connected address. If the buffers
do not have enough remaining space to store the datagram, the part of the
datagram that does not fit in the buffers is discarded. Otherwise, this
method has the same behavior as the read
method in the
ScatteringByteChannel
interface.
targets | the byte buffers to store the received datagram. |
---|---|
offset | a non-negative offset in the array of buffers, pointing to the
starting buffer to store the bytes transferred, must not be
bigger than targets.length . |
length | a non-negative length to indicate the maximum number of
buffers to be filled, must not be bigger than
targets.length - offset . |
NotYetConnectedException | if the channel is not connected yet. |
---|---|
ClosedChannelException | if the channel is already closed. |
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
IOException | some other I/O error occurs. |
Reads a datagram from this channel into the byte buffer.
The precondition for calling this method is that the channel is connected
and the incoming datagram is from the connected address. If the buffer is
not big enough to store the datagram, the part of the datagram that does
not fit in the buffer is discarded. Otherwise, this method has the same
behavior as the read
method in the ReadableByteChannel
interface.
target | the byte buffer to store the received datagram. |
---|
NotYetConnectedException | if the channel is not connected yet. |
---|---|
ClosedChannelException | if the channel is already closed. |
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
IOException | some other I/O error occurs. |
Reads a datagram from this channel into an array of byte buffers.
The precondition for calling this method is that the channel is connected
and the incoming datagram is from the connected address. If the buffers
do not have enough remaining space to store the datagram, the part of the
datagram that does not fit in the buffers is discarded. Otherwise, this
method has the same behavior as the read
method in the
ScatteringByteChannel
interface.
targets | the byte buffers to store the received datagram. |
---|
NotYetConnectedException | if the channel is not connected yet. |
---|---|
ClosedChannelException | if the channel is already closed. |
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
IOException | some other I/O error occurs. |
Gets a datagram from this channel.
This method transfers a datagram from the channel into the target byte
buffer. If this channel is in blocking mode, it waits for the datagram
and returns its address when it is available. If this channel is in
non-blocking mode and no datagram is available, it returns null
immediately. The transfer starts at the current position of the buffer,
and if there is not enough space remaining in the buffer to store the
datagram then the part of the datagram that does not fit is discarded.
This method can be called at any time and it will block if there is another thread that has started a read operation on the channel.
This method executes the same security checks as the receive method of
the DatagramSocket
class.
target | the byte buffer to store the received datagram. |
---|
ClosedChannelException | if the channel is already closed. |
---|---|
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
SecurityException | if there is a security manager, and the address is not permitted to be accessed. |
IOException | some other I/O error occurs. |
Sends a datagram through this channel. The datagram consists of the
remaining bytes in source
.
If this channel is in blocking mode then the datagram is sent as soon as there is enough space in the underlying output buffer. If this channel is in non-blocking mode then the datagram is only sent if there is enough space in the underlying output buffer at that moment. The transfer action is just like a regular write operation.
This method can be called at any time and it will block if another thread has started a send operation on this channel.
This method executes the same security checks as the send method of the
DatagramSocket
class.
source | the byte buffer with the datagram to be sent. |
---|---|
address | the destination address for the datagram. |
source
or zero if the channel is in non-blocking mode
and there is not enough space for the datagram in the underlying
output buffer.ClosedChannelException | if the channel is already closed. |
---|---|
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
SecurityException | if there is a security manager, and the address is not permitted to access. |
IOException | some other I/O error occurs. |
Returns the related datagram socket of this channel, which does not
define additional public methods to those defined by
DatagramSocket
.
Gets the valid operations of this channel. Datagram channels support read
and write operations, so this method returns (
SelectionKey.OP_READ
| SelectionKey.OP_WRITE
).
Writes a datagram from the byte buffers to this channel.
The precondition of calling this method is that the channel is connected
and the datagram is sent to the connected address. Otherwise, this method
has the same behavior as the write
method in the
GatheringByteChannel
interface.
sources | the byte buffers as the source of the datagram. |
---|---|
offset | a non-negative offset in the array of buffers, pointing to the
starting buffer to be retrieved, must be no larger than
sources.length . |
length | a non-negative length to indicate the maximum number of
buffers to be submitted, must be no bigger than
sources.length - offset . |
NotYetConnectedException | if the channel is not connected yet. |
---|---|
ClosedChannelException | if the channel is already closed. |
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
IOException | some other I/O error occurs. |
Writes a datagram from the byte buffers to this channel.
The precondition of calling this method is that the channel is connected
and the datagram is sent to the connected address. Otherwise, this method
has the same behavior as the write method in the
GatheringByteChannel
interface.
sources | the byte buffers as the source of the datagram. |
---|
NotYetConnectedException | if the channel is not connected yet. |
---|---|
ClosedChannelException | if the channel is already closed. |
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
IOException | some other I/O error occurs. |
Writes a datagram from the byte buffer to this channel.
The precondition of calling this method is that the channel is connected
and the datagram is sent to the connected address. Otherwise, this method
has the same behavior as the write
method in the
WritableByteChannel
interface.
source | the byte buffer as the source of the datagram. |
---|
NotYetConnectedException | if the channel is not connected yet. |
---|---|
ClosedChannelException | if the channel is already closed. |
AsynchronousCloseException | if the channel is closed by another thread while this method is in operation. |
ClosedByInterruptException | if another thread interrupts the calling thread while the operation is in progress. The calling thread will have the interrupt state set and the channel will be closed. |
IOException | some other I/O error occurs. |