I heard about another I/O package called NIO. Can you tell me about it?
Originally called New I/O, the NIO package was added to Java by JDK 1.4. It supports the channel-based I/O operations approach. NIO classes are in the java.nio package and its subordinate packages, such as java.nio.channels and java.nio.charset.
NIO is based on two basic items: buffers and channels. The buffer stores data, the channel represents an open connection to an I/O device such as a file or a socket. In general, to use the new I/O system, we have to obtain a channel with an I/O device and a buffer to store data. Then we operate with the buffer, inserting or displaying data when necessary.
Two other entities used by NIO are character sets and
selectors. A character set defines the way bytes are mapped to characters. We can encode a sequence of characters in the form of bytes using an encoder. And we can decode a sequence of bytes into character form using a decoder. A selector supports key-based, non-blocking, and multiplexed I/O. In other words, selectors allow us to perform I/O across multiple channels. They are most applicable to socket-based channels.
As of JDK 7, NIO has undergone profound improvements, such that the term NIO. 2 is often used. The improvements included three new packages (java.nio.file, java.nio.file.attribute and java.nio.file.spi); several new classes, interfaces and methods; and direct support for stream-based I/O. The additions have expanded the ways NIO can be used, particularly with files.
It is important to understand that NIO does not replace the I/O classes found in java.io, which are being discussed in this chapter. Instead, NIO classes are designed to complement the standard I/O system, offering an alternative approach, which may be beneficial in some circumstances.
The above is the detailed content of Ask the Expert - I/O. For more information, please follow other related articles on the PHP Chinese website!