Defines channels, which represent connections to entities that are capable of performing I/O operations, such as files and sockets; defines selectors, for multiplexed, non-blocking I/O operations.
Channels Description java.nio.channels.Channel
A nexus for I/O operations java.nio.channels.ReadableByteChannel
Can read into a buffer java.nio.channels.ScatteringByteChannel
Can read into a sequence of buffers java.nio.channels.WritableByteChannel
Can write from a buffer java.nio.channels.GatheringByteChannel
Can write from a sequence of buffers java.nio.channels.ByteChannel
Can read/write to/from a buffer java.nio.channels.SeekableByteChannel
A ByteChannel
connected to an entity that contains a variable-length sequence of bytesjava.nio.channels.AsynchronousChannel
Supports asynchronous I/O operations. java.nio.channels.AsynchronousByteChannel
Can read and write bytes asynchronously java.nio.channels.NetworkChannel
A channel to a network socket java.nio.channels.MulticastChannel
Can join Internet Protocol (IP) multicast groups java.nio.channels.Channels
Utility methods for channel/stream interoperation
A channel represents an open connection to an entity such as a
hardware device, a file, a network socket, or a program component that is
capable of performing one or more distinct I/O operations, for example reading
or writing. As specified in the java.nio.channels.Channel
interface,
channels are either open or closed, and they are both asynchronously
closeable and interruptible.
The java.nio.channels.Channel
interface is extended by several
other interfaces.
The java.nio.channels.ReadableByteChannel
interface specifies a
read
method that reads bytes
from the channel into a buffer; similarly, the java.nio.channels.WritableByteChannel
interface specifies a write
method that writes bytes
from a buffer to the channel. The java.nio.channels.ByteChannel
interface unifies these two interfaces for the common case of channels that can
both read and write bytes. The java.nio.channels.SeekableByteChannel
interface extends the ByteChannel
interface with methods to query
and modify
the channel's
current position, and its size
.
The java.nio.channels.ScatteringByteChannel
and java.nio.channels.GatheringByteChannel
interfaces extend the java.nio.channels.ReadableByteChannel
and java.nio.channels.WritableByteChannel
interfaces, respectively, adding read
and write
methods that take a
sequence of buffers rather than a single buffer.
The java.nio.channels.NetworkChannel
interface specifies methods
to bind
the channel's socket,
obtain the address to which the socket is bound, and methods to get
and set
socket options. The java.nio.channels.MulticastChannel
interface specifies methods to join
Internet Protocol (IP) multicast groups.
The java.nio.channels.Channels
utility class defines static methods
that support the interoperation of the stream classes of the java.io
package with the channel classes of this package. An appropriate
channel can be constructed from an java.io.InputStream
or an java.io.OutputStream
, and conversely an java.io.InputStream
or an
java.io.OutputStream
can be constructed from a channel. A java.io.Reader
can be constructed that uses a given charset to decode bytes
from a given readable byte channel, and conversely a java.io.Writer
can
be constructed that uses a given charset to encode characters into bytes and
write them to a given writable byte channel.
File channels Description java.nio.channels.FileChannel
Reads, writes, maps, and manipulates files java.nio.channels.FileLock
A lock on a (region of a) file java.nio.MappedByteBuffer
A direct byte buffer mapped to a region of a file
The java.nio.channels.FileChannel
class supports the usual
operations of reading bytes from, and writing bytes to, a channel connected to
a file, as well as those of querying and modifying the current file position
and truncating the file to a specific size. It defines methods for acquiring
locks on the whole file or on a specific region of a file; these methods return
instances of the java.nio.channels.FileLock
class. Finally, it defines
methods for forcing updates to the file to be written to the storage device that
contains it, for efficiently transferring bytes between the file and other
channels, and for mapping a region of the file directly into memory.
A FileChannel
is created by invoking one of its static open
methods, or by invoking the
getChannel
method of a java.io.FileInputStream
, java.io.FileOutputStream
, or java.io.RandomAccessFile
to return a
file channel connected to the same underlying file as the java.io
class.
Multiplexed, non-blocking I/O Description
java.nio.channels.SelectableChannel
A channel that can be multiplexed java.nio.channels.DatagramChannel
A channel to a datagram-oriented socket java.nio.channels.Pipe.SinkChannel
The write end of a pipe java.nio.channels.Pipe.SourceChannel
The read end of a pipe java.nio.channels.ServerSocketChannel
A channel to a stream-oriented listening socket java.nio.channels.SocketChannel
A channel for a stream-oriented connecting socket java.nio.channels.Selector
A multiplexor of selectable channels java.nio.channels.SelectionKey
A token representing the registration
of a channel with a selectorjava.nio.channels.Pipe
Two channels that form a unidirectional pipe
Multiplexed, non-blocking I/O, which is much more scalable than thread-oriented, blocking I/O, is provided by selectors, selectable channels, and selection keys.
A selector is a multiplexor of selectable channels, which in turn are
a special type of channel that can be put into non-blocking mode. To perform
multiplexed I/O operations, one or more selectable channels are first created,
put into non-blocking mode, and registered
with a selector. Registering a channel specifies the set of I/O operations
that will be tested for readiness by the selector, and returns a selection key that represents the
registration.
Once some channels have been registered with a selector, a selection operation can be performed in order to discover which channels, if any, have become ready to perform one or more of the operations in which interest was previously declared. If a channel is ready then the key returned when it was registered will be added to the selector's selected-key set. The key set, and the keys within it, can be examined in order to determine the operations for which each channel is ready. From each key one can retrieve the corresponding channel in order to perform whatever I/O operations are required.
That a selection key indicates that its channel is ready for some operation is a hint, but not a guarantee, that such an operation can be performed by a thread without causing the thread to block. It is imperative that code that performs multiplexed I/O be written so as to ignore these hints when they prove to be incorrect.
This package defines selectable-channel classes corresponding to the java.net.DatagramSocket
, java.net.ServerSocket
, and java.net.Socket
classes defined in the java.net
package.
Minor changes to these classes have been made in order to support sockets that
are associated with channels. This package also defines a simple class that
implements unidirectional pipes. In all cases, a new selectable channel is
created by invoking the static open method of the corresponding class.
If a channel needs an associated socket then a socket will be created as a side
effect of this operation.
The implementation of selectors, selectable channels, and selection keys
can be replaced by "plugging in" an alternative definition or instance of the
java.nio.channels.spi.SelectorProvider
class defined in the java.nio.channels.spi
package. It is not expected that many developers
will actually make use of this facility; it is provided primarily so that
sophisticated users can take advantage of operating-system-specific
I/O-multiplexing mechanisms when very high performance is required.
Much of the bookkeeping and synchronization required to implement the
multiplexed-I/O abstractions is performed by the java.nio.channels.spi.AbstractInterruptibleChannel
, java.nio.channels.spi.AbstractSelectableChannel
, java.nio.channels.spi.AbstractSelectionKey
, and java.nio.channels.spi.AbstractSelector
classes in the java.nio.channels.spi
package. When defining a custom selector provider,
only the java.nio.channels.spi.AbstractSelector
and java.nio.channels.spi.AbstractSelectionKey
classes should be subclassed
directly; custom channel classes should extend the appropriate java.nio.channels.SelectableChannel
subclasses defined in this package.
Asynchronous I/O Description java.nio.channels.AsynchronousFileChannel
An asynchronous channel for reading, writing, and manipulating a file java.nio.channels.AsynchronousSocketChannel
An asynchronous channel to a stream-oriented connecting socket java.nio.channels.AsynchronousServerSocketChannel
An asynchronous channel to a stream-oriented listening socket java.nio.channels.CompletionHandler
A handler for consuming the result of an asynchronous operation java.nio.channels.AsynchronousChannelGroup
A grouping of asynchronous channels for the purpose of resource sharing
Asynchronous channels
are a
special type of channel capable of asynchronous I/O operations. Asynchronous
channels are non-blocking and define methods to initiate asynchronous
operations, returning a java.util.concurrent.Future
representing the
pending result of each operation. The Future
can be used to poll or
wait for the result of the operation. Asynchronous I/O operations can also
specify a java.nio.channels.CompletionHandler
to invoke when the
operation completes. A completion handler is user provided code that is executed
to consume the result of I/O operation.
This package defines asynchronous-channel classes that are connected to
a stream-oriented connecting or listening socket, or a datagram-oriented socket.
It also defines the java.nio.channels.AsynchronousFileChannel
class
for asynchronous reading, writing, and manipulating a file. As with the java.nio.channels.FileChannel
it supports operations to truncate the file
to a specific size, force updates to the file to be written to the storage
device, or acquire locks on the whole file or on a specific region of the file.
Unlike the FileChannel
it does not define methods for mapping a
region of the file directly into memory. Where memory mapped I/O is required,
then a FileChannel
can be used.
Asynchronous channels are bound to an asynchronous channel group for the
purpose of resource sharing. A group has an associated java.util.concurrent.ExecutorService
to which tasks are submitted to handle
I/O events and dispatch to completion handlers that consume the result of
asynchronous operations performed on channels in the group. The group can
optionally be specified when creating the channel or the channel can be bound
to a default group. Sophisticated users may wish to create their
own asynchronous channel groups or configure the ExecutorService
that will be used for the default group.
As with selectors, the implementation of asynchronous channels can be
replaced by "plugging in" an alternative definition or instance of the java.nio.channels.spi.AsynchronousChannelProvider
class defined in the
java.nio.channels.spi
package. It is not expected that many
developers will actually make use of this facility; it is provided primarily
so that sophisticated users can take advantage of operating-system-specific
asynchronous I/O mechanisms when very high performance is required.
Unless otherwise noted, passing a null argument to a constructor
or method in any class or interface in this package will cause a NullPointerException
to be thrown.