Top Description Interfaces Classes
module java.base

Package java.nio.channels


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.
Lists channels and their descriptions
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 bytes
java.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.

Lists file channels and their descriptions
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.

Lists multiplexed, non-blocking channels and their descriptions
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 selector
java.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.

java.nio.channels.DatagramChannel, java.nio.channels.SocketChannel and java.nio.channels.ServerSocketChannels can be created with different protocol families. The standard family types are specified in java.net.StandardProtocolFamily.

Channels for Internet Protocol sockets are created using the INET or INET6 protocol families. Internet Protocol sockets support network communication using TCP and UDP and are addressed using java.net.InetSocketAddresses which encapsulate an IP address and port number. Internet Protocol sockets are also the default type created, when a protocol family is not specified in the channel factory creation method.

Channels for Unix Domain sockets are created using the UNIX protocol family. Unix Domain sockets support local inter-process communication on the same host, and are addressed using java.net.UnixDomainSocketAddresses which encapsulate a filesystem pathname on the local system.

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.

Lists asynchronous channels and their descriptions
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.

Authors
Mark Reinhold, JSR-51 Expert Group
Since
1.4

Interface Summary

Modifier and TypeInterface and Description
public interface
AsynchronousByteChannel

An asynchronous channel that can read and write bytes.

public interface
AsynchronousChannel

A channel that supports asynchronous I/O operations.

public interface
ByteChannel

A channel that can read and write bytes.

public interface
Channel

A nexus for I/O operations.

public interface
CompletionHandler<
The result type of the I/O operation
V
,
The type of the object attached to the I/O operation
A
>

A handler for consuming the result of an asynchronous I/O operation.

public interface
GatheringByteChannel

A channel that can write bytes from a sequence of buffers.

public interface
InterruptibleChannel

A channel that can be asynchronously closed and interrupted.

public interface
MulticastChannel

A network channel that supports Internet Protocol (IP) multicasting.

public interface
NetworkChannel

A channel to a network socket.

public interface
ReadableByteChannel

A channel that can read bytes.

public interface
ScatteringByteChannel

A channel that can read bytes into a sequence of buffers.

public interface
SeekableByteChannel

A byte channel that maintains a current position and allows the position to be changed.

public interface
WritableByteChannel

A channel that can write bytes.

Class Summary

Modifier and TypeClass and Description
public class
AcceptPendingException

Unchecked exception thrown when an attempt is made to initiate an accept operation on a channel and a previous accept operation has not completed.

public class
AlreadyBoundException

Unchecked exception thrown when an attempt is made to bind the socket a network oriented channel that is already bound.

public class
AlreadyConnectedException

Unchecked exception thrown when an attempt is made to connect a SocketChannel that is already connected.

public abstract class
AsynchronousChannelGroup

A grouping of asynchronous channels for the purpose of resource sharing.

public class
AsynchronousCloseException

Checked exception received by a thread when another thread closes the channel or the part of the channel upon which it is blocked in an I/O operation.

public abstract class
AsynchronousFileChannel

An asynchronous channel for reading, writing, and manipulating a file.

public abstract class
AsynchronousServerSocketChannel

An asynchronous channel for stream-oriented listening sockets.

public abstract class
AsynchronousSocketChannel

An asynchronous channel for stream-oriented connecting sockets.

public class
CancelledKeyException

Unchecked exception thrown when an attempt is made to use a selection key that is no longer valid.

public class
Channels

Utility methods for channels and streams.

public class
ClosedByInterruptException

Checked exception received by a thread when another thread interrupts it while it is blocked in an I/O operation upon a channel.

public class
ClosedChannelException

Checked exception thrown when an attempt is made to invoke or complete an I/O operation upon channel that is closed, or at least closed to that operation.

public class
ClosedSelectorException

Unchecked exception thrown when an attempt is made to invoke an I/O operation upon a closed selector.

public class
ConnectionPendingException

Unchecked exception thrown when an attempt is made to connect a SocketChannel for which a non-blocking connection operation is already in progress.

public abstract class
DatagramChannel

A selectable channel for datagram-oriented sockets.

public abstract class
FileChannel

A channel for reading, writing, mapping, and manipulating a file.

public abstract class
FileLock

A token representing a lock on a region of a file.

public class
FileLockInterruptionException

Checked exception received by a thread when another thread interrupts it while it is waiting to acquire a file lock.

public class
IllegalBlockingModeException

Unchecked exception thrown when a blocking-mode-specific operation is invoked upon a channel in the incorrect blocking mode.

public class
IllegalChannelGroupException

Unchecked exception thrown when an attempt is made to open a channel in a group that was not created by the same provider.

public class
IllegalSelectorException

Unchecked exception thrown when an attempt is made to register a channel with a selector that was not created by the provider that created the channel.

public class
InterruptedByTimeoutException

Checked exception received by a thread when a timeout elapses before an asynchronous operation completes.

public abstract class
MembershipKey

A token representing the membership of an Internet Protocol (IP) multicast group.

public class
NoConnectionPendingException

Unchecked exception thrown when the finishConnect method of a SocketChannel is invoked without first successfully invoking its connect method.

public class
NonReadableChannelException

Unchecked exception thrown when an attempt is made to read from a channel that was not originally opened for reading.

public class
NonWritableChannelException

Unchecked exception thrown when an attempt is made to write to a channel that was not originally opened for writing.

public class
NotYetBoundException

Unchecked exception thrown when an attempt is made to invoke an I/O operation upon a server socket channel that is not yet bound.

public class
NotYetConnectedException

Unchecked exception thrown when an attempt is made to invoke an I/O operation upon a socket channel that is not yet connected.

public class
OverlappingFileLockException

Unchecked exception thrown when an attempt is made to acquire a lock on a region of a file that overlaps a region already locked by the same Java virtual machine, or when another thread is already waiting to lock an overlapping region of the same file.

public abstract class
Pipe

A pair of channels that implements a unidirectional pipe.

public class
ReadPendingException

Unchecked exception thrown when an attempt is made to read from an asynchronous socket channel and a previous read has not completed.

public abstract class
SelectableChannel

A channel that can be multiplexed via a Selector.

public abstract class
SelectionKey

A token representing the registration of a SelectableChannel with a Selector.

public abstract class
Selector

A multiplexor of SelectableChannel objects.

public abstract class
ServerSocketChannel

A selectable channel for stream-oriented listening sockets.

public class
ShutdownChannelGroupException

Unchecked exception thrown when an attempt is made to construct a channel in a group that is shutdown or the completion handler for an I/O operation cannot be invoked because the channel group has terminated.

public abstract class
SocketChannel

A selectable channel for stream-oriented connecting sockets.

public class
UnresolvedAddressException

Unchecked exception thrown when an attempt is made to invoke a network operation upon an unresolved socket address.

public class
UnsupportedAddressTypeException

Unchecked exception thrown when an attempt is made to bind or connect to a socket address of a type that is not supported.

public class
WritePendingException

Unchecked exception thrown when an attempt is made to write to an asynchronous socket channel and a previous write has not completed.