NIO的通道类似于流,但有些区别如下:
•通道可以同时进行读写,而流只能读或者只能写
•通道可以实现异步读写数据
•通道可以从缓冲区(Buffer)读数据,也可以写数据到缓冲区
BIO 中的 stream 是单向的,例如 FileInputStream 对象只能进行读取数据的操作,而 NIO 中的通道(Channel)是双向的,可以读操作,也可以写操作。
Channel在NIO中是一个接口
public interface Channel extends Closeable{}
常用的 Channel 类有:FileChannel、DatagramChannel、ServerSocketChannel 和
SocketChannel。【ServerSocketChanne 类似
ServerSocket , SocketChannel 类似 Socket】
FileChannel 用于文件的数据读写,
DatagramChannel 用于 UDP 的数据读写,
ServerSocketChannel 和 SocketChannel 用于 TCP
的数据读写。
※ServerSocketChannel的用处是:当有客户端像服务器发送信息的时候,ServerSocketChannel都会给客户端分配一个SocketChannel--实际用的是ServerSocketChannelImpl和SocketChannelImpl
※FileChannel主要用来对本地文件进行 IO 操作,常见的方法有:
1) public int read(ByteBuffer dst) ,从通道读取数据并放到缓冲区中
2) public int write(ByteBuffer src) ,把缓冲区的数据写到通道中
3) public long transferFrom(ReadableByteChannel src, long position, long count),从目标通道
中复制数据到当前通道
4) public long transferTo(long position, long count, WritableByteChannel target),把数据从当
前通道复制给目标通道