nio和bio的区别

bio:

  1. 面向流的。
  2. 单向的。
  3. 阻塞的,这也是b这个的由来。

nio:

  1. 面向块的。(buffer)
  2. 双向的。
  3. 非阻塞的。同步的编程方式。是一种select模型

nio编程的常规步骤

从channel中获取的任何数据,都必须经过buffer来存放。

  1. 获取到channel。这里如果是从流中获取的channel,那么channel,也只支持单向。
  2. 构建Buffer
  3. 数据塞到Buffer中,如果是写回操作,执行flip
  4. 写回或读取

Buffer 的使用

  buffer中的3个核心变量,和一个不常用的变量(mark):

  1. mark 设置标记,记下position的位置 ,用reset方法,可以返回这
  2. posotion 读写的位置,下一个要读和写的位置。
  3. limit 可读或可写的最大值,下一个不可读或不可写的元素下标。
  4. capacity buffer的最大值,创建之后就不会变。

直接内存映射,零拷贝:

常规的java流操作过程:

  1. 将数据从jvm中,拷贝到堆外内存,jvm中,仅保存地址。
  2. 修改堆外的数据块,写入,读取。
  3. 将堆外内存,变化的,再拷回jvm的内存中。

buffer有一个直接内存映射的buffer,叫DirectByteBuffer,通过DirectByteBuffer可以将数据库块直接放在jvm堆外的内存中,使得操作数据时,不需要将内存数据,从jvm中拷贝到堆外内存中。

可以通过调用buffer的map方法,获得一个内存中的buffer。直接操作buffer,相当于操作原文件。

最新文章

  1. PHP正则表达式
  2. Delphi 中同类型方法的说明
  3. 洛谷 P1160 队列安排 Label:链表 数据结构
  4. const与#define宏常量 , inline与#define
  5. Java字符串null相加
  6. jdk线程的简单使用
  7. 基于HTTP 协议认证介绍与实现
  8. android开源项目学习
  9. PHP in_array不兼容问题
  10. JNI调用的helloworld(JNI_OnLoad映射方式)
  11. 怎样使用C# MD5加密来增强密码的安全度
  12. pickle 模块
  13. python学习之读写csv文件(使用pandas)
  14. highcharts之柱状图
  15. mousedown和click冲突事件
  16. 【读书笔记】iOS-iCloud文件备份
  17. 支持自定义协议的虚拟仪器【winform版】
  18. js分割数字
  19. spring boot 学习(六)spring boot 各版本中使用 log4j2 记录日志
  20. [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习

热门文章

  1. SpringBean生命周期及作用域
  2. PyCharm设置Python版本,你肯定不知道!
  3. Dubbo一致性哈希负载均衡的源码和Bug,了解一下?
  4. DWVA-关于SQL注入的漏洞详解
  5. 每周一练 之 数据结构与算法(Tree)
  6. LNMP环境搭建(<=PHP7.2)
  7. harbor客户端证书问题
  8. python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决
  9. c++-重载等号,数组,指针,字符串类
  10. 如何正确使用 Spring Cloud?【上】