The new I/O (NIO) APIs introduced in v 1.4
provide new features and improved
performance in the areas of buffer management,
scalable network and file I/O,
character-set support,
and
regular-expression matching.
The NIO APIs supplement the I/O facilities in the
java.io package.
Features
The NIO APIs include the following features:
Buffers for data of primitive types
Character-set encoders and decoders
A pattern-matching facility based on Perl-style regular expressions
Channels, a new primitive I/O abstraction
A file interface that supports locks and memory mapping
A multiplexed, non-blocking I/O facility for writing scalable servers
Enhancements
J2SE 5.0 Enhancement - the JDK introduced a new class named
javax.net.ssl.SSLEngine.
The existing J2SDK 1.4.0 secure communication infrastructure,
javax.net.ssl.SSLSocket,
was based on the I/O model of java.net.Socket.
The javax.net.ssl.SSLEngine class abstracts away the
I/O model, and leaves developers free to secure communication
pathways using alternate types of I/O. SSLEngine can be
combined with the New I/O APIs to create implementations such as
secure blocking or non-blocking SocketChannels.
For details see the
J2SE 5.0 Enhancements.
java.util.regex package:
Classes for matching character sequences against
patterns specified by regular expressions.
java.lang.CharSequence interface: The interface implemented by objects
that can be passed as arguments
to methods in the java.util.regex package.
The String, StringBuffer,
and java.nio.CharBuffer
classes implement this interface.
In the
FileInputStream and
FileOutputStream
classes,
getChannel methods have been added
to return the underlying FileChannel object, and
the close methods have been revised
to close the underlying channel.
Similarly, in the
RandomAccessFile class,
a getChannel method has been added and
the close method has been revised
to close the underlying channel.
The RandomAccessFile constructors now support
the mode characters "s" and "d"
to allow the specification, at file-open time,
of synchronous writes or synchronous-data writes.
In the
InputStreamReader
and
OutputStreamWriter classes,
constructors have been added that take a stream
and a Charset object,
and the getEncoding methods have been revised
to return the historical name of the encoding being used.
Constructors to
InputStreamReader and
OutputStreamWriter
have been added
that take existing
CharsetDecoder and
CharsetEncoder objects, respectively.
In the
String class,
two split methods are new.
The subSequence method has been added,
as required by the
CharSequence interface
that String now implements.
Three additional methods have been added:
matches,
replaceAll, and
replaceFirst.
In the
StringBuffer class,
the subSequence method has been added,
as required by the
CharSequence interface
that StringBuffer now implements.
In the
Thread class,
the interrupt method has been revised
to interrupt threads blocked in channel-I/O operations.
In the
DatagramSocket class,
the receive and send methods
have been revised
to throw a
java.nio.channels.IllegalBlockingModeException
if the socket has a channel and the channel is in
non-blocking mode.
The close method
now closes the socket's channel,
if it has one,
and the new getChannel method
returns the underlying channel, if any.
In the
ServerSocket class,
the accept
and implAccept methods
have been revised to throw a
java.nio.IllegalBlockingModeException
if the socket has a channel and the channel is in
non-blocking mode.
The getChannel method has been added
and close revised,
for the same reasons as in DatagramSocket.
In the
Socket class,
the getInputStream
and getOutputStream
methods have been revised
to delegate all I/O operations
to the socket's channel,
if it has one.
The connect methods have been revised to throw a
java.nio.IllegalBlockingModeException
if the socket has a channel and the channel is in
non-blocking mode.
The getChannel method has been added
and close revised,
for the same reasons as in DatagramSocket.
Three new functions have been added to the
Java Native Interface (JNI)
to support direct buffers.
For information, see
JNI Enhancements in v 1.4.