20.2.2 通道
通道是由java.nio.channels包定义的。通道表示到I/O源或目标的打开的连接。通道实现了Channel接口并扩展了Closeable接口,并且从JDK 7开始还扩展了AutoCloseable接口。通过实现AutoCloseable接口,可以使用JDK 7新增的带资源的try语句管理通道。如果使用带资源的try语句,那么当通道不再需要时会自动关闭(关于带资源的try语句的讨论,请查看第13章)。
获取通道的一种方式是对支持通道的对象调用getChannel()方法。例如,以下I/O类支持getChannel()方法:
根据调用getChannel()方法的对象的类型返回特定类型的通道。例如,当对FileInputStream、FileOutputStream或RandomAccessFile对象调用getChannel()方法时,会返回FileChannel类型的通道。当对Socket对象调用getChannel()方法时,会返回SocketChannel类型的通道。
获取通道的另外一种方式是使用Files类定义的静态方法,该类是由JDK 7新增的。例如,使用Files类,可以通过newByteChannel()方法获取字节通道。该方法返回一个SeekableByteChannel对象,SeekableByteChannel是FileChannel实现的一个接口(在本章的后面将详细分析Files类)。
FileChannel和SocketChannel这类通道支持各种read()和write()方法,使用这些方法可以通过通道执行I/O操作。例如,表20-4中是为FileChannel定义的一些read()和write()方法。
表20-4 为FileChannel定义的read()和write()方法