NIO技术

1.NIO之零拷贝

先简单说一下什么叫深拷贝浅拷贝?

深拷贝是指  两个对象相互独立的copy

浅拷贝  引用名不同

零拷贝技术

Channel负责传输,Buffer负责存储

传统IO

 File 文件类  

字符流                   字节流 

Reader类              Stream 类

out in  和 read  Writer  都是基于计算机来说的 

FileOutputStream  文件流 

BufferedOutputStream  用于优化文件流 增加一个缓存区 

用字节流还是字符流

其实底层都是字节,我们使用字符是为了处理一些文本和字符串提高性能

如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点

NI

Channel    Buffer   select

Channel   

这些是Java NIO中最重要的通道的实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel 从文件中读写数据。

DatagramChannel 能通过UDP读写网络中的数据。

SocketChannel 能通过TCP读写网络中的数据。

ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

file .getChannel

Buffer

基本用法    使用Buffer读写数据一般遵循以下四个步骤:

  1. 写入数据到Buffer
  2. 调用flip()方法
  3. 从Buffer中读取数据
  4. 调用clear()方法或者compact()方法

ByteBuffer buf = ByteBuffer.allocate(48);

 inChannel.read(buf);

追加写入文件

创建文件输出流加上参数 true

FileOutputStream(file,true)

BIO NIO  AIO 详解

对于BIO   请求同步阻塞,等待结果

对于NIO   不阻塞   没有结果返回 ,用 select 一直轮询 查看

对于AIO 不阻塞 异步  没有轮询 ,由客户端通知

用取外卖的例子说明

BIO    我走到小区门口的外卖柜  发现没有到  就一直等着外卖员 送到了 我再走

NIO  我走到小区门口外卖贵  没有  回家了 然后放了一个监视器  每几秒钟看一眼到没到 到了再去取

AIO  我打电话告诉小区保安  我有一个外卖  。  小区保安看到外卖后给我打电话  我去取。

用缓存区来解释

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值