FileChannel
连接到文件的通道,可以通过文件通道读写文件。始终是阻塞的,无法实现非阻塞,即不支持Selector
获取FileChannel
需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。
读取数据
创建一个ByteChannel,然后读取数据。
写入数据
使用write写入Buffer数据。注意flip的使用:
关闭通道
size
获取文件的大小
truncate截断
截断前1024个字节:
force
刷写,类似于flush
true表示同时写入元信息。
SocketChannel
客户端channel,类似于socket
创建并连接
使用SocketChannel.open创建,使用connect进行连接
关闭连接
close关闭连接
读取数据
与FileChannel类似
写入数据
与FileChannel类似
非阻塞模式
使用configureBlocking使用非阻塞模式。
connect:
可能在连接之前就已经返回,因此需要判断是否结束连接
ServerSocketChannel
服务端SocketChannel,类似ServerSocket
使用ServerSocketChannel的open创建对象,使用socket().bind()绑定端口
创建ServerSocketChannel
关闭
监听连接:
非阻塞模式
此处accept在阻塞情况下一直等待,直到有连接到达,非阻塞情况下如果没有连接将会返回null。
DatagramChannel
操作UDP的Channel。
创建连接
使用DatagramChannel.open创建连接,使用.socket().bind()连接。
接受数据
使用receive方法读取数据:
发送数据
Pipe
管道,管道包含一个sinkChannel和一个SourceChannel
数据写入到sinkChannel,从sourceChannel中读取。
创建管道
写入数据
读取数据