Enhancements in Java I/O

There are several improvements to the standard
(java.nio.charset.Charset) and extended charset
implementations. They include:

New SelectorProvider implementation for Solaris based on the Solaris event port mechanism. This SelectorProvider may improve performance or scalability for some server workloads. The /dev/poll SelectorProvider continues to be the default. To use the Solaris event port mechanism, run with the system property java.nio.channels.spi.Selector set to the value sun.nio.ch.EventPortSelectorProvider.

Decrease in the size of
<JDK_HOME>/jre/lib/charsets.jar file

Performance improvement for the java.lang.String(byte[],
*) constructor and the
java.lang.String.getBytes() method.

The java.nio.file
package and its related package, java.nio.file.attribute,
provide comprehensive support for file I/O and for accessing the
file system. A zip file system provider is also available in JDK 7.
The following resources provide more information:

Area: NIOStandard/Platform: JDK 7Synopsis: Prior to the JDK 7 release, direct buffers
allocated using java.nio.ByteBuffer.allocateDirect(int)
were aligned on a page boundary. In JDK 7, the implementation has
changed so that direct buffers are no longer page aligned. This
should reduce the memory requirements of applications that create
lots of small buffers.RFE: 4837564

java.io

One new class is provided:

Console -
Contains methods to access a character-based console device. The
readPassword() methods disable echoing thus they are
suitable for retrieval of sensitive data such as passwords. The
method System.console()
returns the unique console associated with the Java Virtual
Machine.

The File.isFile()
Windows implementation has been modified to always return
false for reserved device names such as CON, NUL, AUX,
LPT, etc. Previously it returned true, which customers
considered a bug because it was inconsistent with behavior for
devices on UNIX.

java.nio

A new java.nio.channels.SelectorProvider
implementation that is based on the Linux epoll event notification
facility is included. The epoll facility is available in the Linux
2.6, and newer, kernels. The new epoll-based
SelectorProvider implementation is more scalable than
the traditional poll-based SelectorProvider
implementation when there are thousands of SelectableChannels
registered with a Selector.
The new SelectorProvider implementation will be used
by default when the 2.6 kernel is detected. The poll-based
SelectorProvider will be used when a pre-2.6 kernel is
detected.

The system property
sun.nio.ch.disableSystemWideOverlappingFileLockCheck
controls whether java.nio.channels.FileChannel.lock()
checks whether regions are locked by other instances of
FileChannel. Unless this system property is set to
true, FileChannel.lock() will throw an
OverlappingFileLockException if an application attempts
to lock a region that overlaps one that is locked by another
instance of FileChannel. The system property exists to
provide compatibility with previous releases which do not implement
the JVM-wide overlapping file lock check.

java.nio

Class javax.net.ssl.SSLEngine
was added. 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
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
JSSE Reference
Guide.

java.io

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.

java.nio

The nio packages were added to supplement the I/O facilities
provided the java.io package.

Three new functions were added to the Java Native Interface
(JNI) to support direct buffers. For information, see JNI Enhancements in v 1.4.