Java NIO(2)

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中读取。

 

创建管道

 

写入数据

 

读取数据

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值