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]

捐款订阅54chen
捐赠说明