通道(Channel
)是数据源和Java程序之间的开放连接,用于执行I/O
操作。Channel
接口在java.nio.channels
包中。通道(Channel
)接口只声明了两个方法:close()
和isOpen()
。
各种渠道
ReadableByteChannel
用于使用read()
方法将数据从数据源读取到字节缓冲区中。WritableByteChannel
用于使用write()
方法将数据从字节缓冲区写入数据宿。
ByteChannel
能够分别使用read()
和write()
方法读取和写入字节数据。ScatteringByteChannel
将数据从数据源读取到多个字节缓冲区中。 从已知的文件格式或类似的数据源读取数据是有用的,其中在一些固定长度的报头中提供数据,随后是可变长度的主体。
GatheringByteChannel
从多个字节缓冲区中写出数据。
创建通道
要获得一个通道,旧的方式使用java.io
包中的类I/O
来创建InputStream
和OutputStream
的对象。java.nio.channels
包中的Channels
类是一个实用程序类,它有许多静态方法将流转换为通道,反之亦然。
Channels
类还提供了将读写器转换为通道的方法,反之亦然。例如,如果有一个名为myInputStream
的输入流对象,获得一个ReadableByteChannel
如下:
1
|
ReadableByteChannel rbc = Channels.newChannel(myInputStream); |
如果有一个名为rbc
的ReadableByteChannel
,可以获得如下的基本InputStream
对象:
1
|
InputStream myInputStream = Channels.newInputStream(rbc); |
FileInputStream
和FileOutputStream
类有一个称为getChannel()
的新方法来返回一个FileChannel
对象。FileChannel
用于读取和写入数据到文件。从FileInputStream
获取的FileChannel
对象以只读模式打开。