Channel工具类提供了将java.io包中的输入输出流与NIO中的channel相互转换的能力。它的方法都是静态方法。
因为这个工具类的方法功能比较特定,所以我们分类来看一下。

从channel获取InputStream、Reader

  1. public static InputStream newInputStream(ReadableByteChannel ch) {
  2. checkNotNull(ch, "ch");
  3. return new sun.nio.ch.ChannelInputStream(ch);
  4. }

这个方法就能从一个ReadableByteChannel获取InputStream,它是直接返回了一个ChannelInputStream,ChannelInputStream其实在很多地方都会用到。我们不去深入介绍它了。

  1. public static Reader newReader(ReadableByteChannel ch,
  2. CharsetDecoder dec,
  3. int minBufferCap)
  4. {
  5. checkNotNull(ch, "ch");
  6. return StreamDecoder.forDecoder(ch, dec.reset(), minBufferCap);
  7. }

这个方法返回一个Reader,它是通过StreamDecoder来实现的。

从InputStream

  1. public static ReadableByteChannel newChannel(final InputStream in) {
  2. checkNotNull(in, "in");
  3. if (in instanceof FileInputStream &&
  4. FileInputStream.class.equals(in.getClass())) {
  5. return ((FileInputStream)in).getChannel();
  6. }
  7. return new ReadableByteChannelImpl(in);
  8. }

这个方法可以从InputStream获取channel。

这里只罗列了与输入相关的InputStream、Reader和Channel之间的转换,与输出相关的OutputStream、Writer和Channel相互转换也有对应的API,这里就不再展示了。