FileChannel

连接到文件的通道,可以通过文件通道读写文件。始终是阻塞的,无法实现非阻塞,即不支持Selector

 

获取FileChannel

需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。

Java NIO(2)

 

读取数据

创建一个ByteChannel,然后读取数据。

Java NIO(2)

 

写入数据

使用write写入Buffer数据。注意flip的使用:

Java NIO(2)

 

关闭通道

Java NIO(2)

 

size

获取文件的大小

Java NIO(2)

 

truncate截断

截断前1024个字节:

Java NIO(2)

 

force

刷写,类似于flush

Java NIO(2)
true表示同时写入元信息。

 

SocketChannel

客户端channel,类似于socket

 

创建并连接

使用SocketChannel.open创建,使用connect进行连接

Java NIO(2)

 

关闭连接

close关闭连接

Java NIO(2)

读取数据

与FileChannel类似

Java NIO(2)

 

写入数据

与FileChannel类似

Java NIO(2)

 

非阻塞模式

使用configureBlocking使用非阻塞模式。

connect:

可能在连接之前就已经返回,因此需要判断是否结束连接

Java NIO(2)

 

ServerSocketChannel

 

服务端SocketChannel,类似ServerSocket

Java NIO(2)

使用ServerSocketChannel的open创建对象,使用socket().bind()绑定端口

 

创建ServerSocketChannel

Java NIO(2)

 

关闭

Java NIO(2)

 

监听连接:

Java NIO(2)

 

非阻塞模式

Java NIO(2)

此处accept在阻塞情况下一直等待,直到有连接到达,非阻塞情况下如果没有连接将会返回null。

 

 

DatagramChannel

操作UDP的Channel。

 

创建连接

Java NIO(2)

使用DatagramChannel.open创建连接,使用.socket().bind()连接。

 

接受数据

使用receive方法读取数据:

Java NIO(2)

 

发送数据

Java NIO(2)

 

 

Pipe

 

管道,管道包含一个sinkChannel和一个SourceChannel

Java NIO(2)

数据写入到sinkChannel,从sourceChannel中读取。

 

创建管道

Java NIO(2)

 

写入数据

Java NIO(2)

Java NIO(2)

 

读取数据

Java NIO(2)

Java NIO(2)

 

 

相关文章: