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,这里就不再展示了。