Java IO在各版本中的提高
JDK8中的提高
在标准的(java.nio.charset.Charset)和扩展的charset实现方面,有许多改进。包括:
- SelectorProvider在Solaris上有新实现(基于Solaris事件端口机制)。这种SelectorProvider有可能在一些工作负荷下有可能会提升性能和扩展性。/dev/poll这种SelectorProvider依旧是默认的。要使用Solaris事件端口机制,启动的时候要设置系统属性java.nio.channels.spi.Selector为sun.nio.ch.EventPortSelectorProvider。
- 将/jre/lib/charsets.jar文件大小减小。
- java.lang.String(byte[], *)构造函数和java.lang.String.getBytes()方法的性能改善。
JDK7中的提高
java.nio.file包和相关包,java.nio.file.attribute,提供了对文件I/O和进入文件系统全面的支持。Zip文件系统在JDK7也可用了。下面的资源提供了更多信息。
- 手册中加入File I/O (NIO 2.0特性)。NIO是指non-blocking I/O。
- 可以开发自定义的File System Provider。
- 可直接使用的Zip File System Provider。
- /sample/nio/chatserver/目录下有些演示java.nio.file包的例子。
- /demo/nio/zipfs/目录下有些演示NIO.2 NFS的例子。
另外,下面的改进也被引进:
- JDK7之前,要开direct buffer得使用java.nio.ByteBuffer.allocateDirect,会对齐在一页的范围里。JDK中,实现被修改了,申请到的direct buffer将不再是页对齐的。这样的好处是减少了内存的浪费,但会创建不少小的buffer。
JDK6中的提高
java.io
一个新的类:
- Console
为File提供了新的方法:
-
为了解磁盘信息准备的方法:
-
getTotalSpace()
-
getFreeSpace()
-
getUsableSpace()
-
为设置权限准备的方法:
-
setWritable
-
setReadable
-
setExecutable
-
canExecute
-
为IOException类增加了新的构造方法 IOException(String, Throwable) 和 IOException(Throwable)。
-
File.isFile在windows的实现有变化。
java.nio
-
基于Linux epoll事件通知机制,有了 java.nio.channels.SelectorProvider的新实现。epoll在Linux2.6及以上的内核中才有。当有成千上万的SelectableChannels注册在一个Selector上时,基于epoll实现的SelectProvider比传统的能更可扩展。新的SelectorProvider实现会在2.6内核上默认使用。2.6以下的内核默认还是原来基于poll的实现。
-
sun.nio.ch.disableSystemWideOverlappingFileLockCheck系统属性,设置了FileChannel要给一个文件加锁的时候,能不能多次加。
JDK5.0中的提高
java.nio
- 新加javax.net.ssl.SSLEngine。之前只能用SSLSocket自己搞。
J2SDK1.4中的提高
java.nio
- 在FileInputStream和FileOutputStream中添加了getChannel方法,返回FileChannel,添加了close方法。
- RadomAccessFile中也同上。
- 为InputStreamReader和OutputstreamWriter类添加构造函数可传入Charset对象。添加了getEncoding方法。
java.nio
- nio包被添加。
- JNI支持direct buffer添加了三个新方法。
过去的提高
- java.io.File
- java.io包
- java.io charset相关
原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
Posted by 54chen java