Channel工具类提供了将java.io包中的输入输出流与NIO中的channel相互转换的能力。它的方法都是静态方法。
因为这个工具类的方法功能比较特定,所以我们分类来看一下。
从channel获取InputStream、Reader
public static InputStream newInputStream(ReadableByteChannel ch) {checkNotNull(ch, "ch");return new sun.nio.ch.ChannelInputStream(ch);}
这个方法就能从一个ReadableByteChannel获取InputStream,它是直接返回了一个ChannelInputStream,ChannelInputStream其实在很多地方都会用到。我们不去深入介绍它了。
public static Reader newReader(ReadableByteChannel ch,CharsetDecoder dec,int minBufferCap){checkNotNull(ch, "ch");return StreamDecoder.forDecoder(ch, dec.reset(), minBufferCap);}
这个方法返回一个Reader,它是通过StreamDecoder来实现的。
从InputStream
public static ReadableByteChannel newChannel(final InputStream in) {checkNotNull(in, "in");if (in instanceof FileInputStream &&FileInputStream.class.equals(in.getClass())) {return ((FileInputStream)in).getChannel();}return new ReadableByteChannelImpl(in);}
这个方法可以从InputStream获取channel。
这里只罗列了与输入相关的InputStream、Reader和Channel之间的转换,与输出相关的OutputStream、Writer和Channel相互转换也有对应的API,这里就不再展示了。
