Java NIO Components
In Java NIO reading and writing are the fundamental process of I/O. Reading from channel: We can create a buffer and then ask a channel to read the data. Writing from channel: We can create a buffer, fill it with data and ask a channel to write the data.
The core components used in the reading and writing operation are:
- Channels
- Buffers
- Selectors
Java NIO has more components and classes than these, but the Channel, Buffer and Selector uses as the core of the API.
Channels and Buffers
In standard I/O API the character streams and byte streams are used. In NIO we work with channels and buffers. All the I/O in NIO is started with a channel. Data is always written from a buffer to a channel and read from a channel to a buffer.
Data reading operation:
Let’s see the channels read data into buffers illustration shown below:
Data writing operation:
Let’s see the buffers write data into channels illustration shown below:
Channels List
In Java NIO the primary Channels used are given below:
- DatagramChannel
- SocketChannel
- FileChannel
- ServerSocketChannel
The above channels cover the UDP (User Datagram Protocol)+TCP(Transmission Control Protocol) network I/O, and file I/O.
Buffers List
In Java NIO the core Buffer used are given below:
- CharBuffer
- DoubleBuffer
- IntBuffer
- LongBuffer
- ByteBuffer
- ShortBuffer
- FloatBuffer
The above buffer’s cover the basic data types that we can send via I/O: characters, double, int, long, byte, short and float.
Selectors
Java NIO provides the concept of “selectors”. It is an object that can be used for monitoring the multiple channels for events like data arrived, connection opened etc. Therefore single thread can monitor the multiple channels for data.
It is used if the application has many Channels (connections) open, but has low traffic on each connection. For example: In a chat server.
Let’s see the thread using a Selector to handle the 3 Channel’s illustration shown below: