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、nio说明 和 对比bio的更多相关文章

  1. Java--Stream,NIO ByteBuffer,NIO MappedByteBuffer性能对比

    目前Java中最IO有多种文件读取的方法,本文章对比Stream,NIO ByteBuffer,NIO MappedByteBuffer的性能,让我们知道到底怎么能写出性能高的文件读取代码. pack ...

  2. 12、NIO、AIO、BIO一

    1.NIO概述 什么是NIO:NIO是New I/O的简称,与旧式的基于流的I/O方式相对,从名字看,他表示新的一套JAVA I/O标准.它是在java1.4中被纳入到JDK中的,并具有以下特性: - ...

  3. Java NIO 学习笔记(七)----NIO/IO 的对比和总结

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  4. c.BIO连接器与NIO连接器的对比

    前面两节,我们分别看了BIO和NIO的两种模式Tomcat的实现方式. BIO的方式,就是传统的一线程,一请求的模式,也就是说,当同时又1000个请求过来,如果Tomcat设置了最大Accept线程数 ...

  5. d.BIO连接器与NIO连接器的对比之二

    前面在Tomcat中讲解了两个通道,BIO和NIO,我们这里来通过两端程序,简单模拟两个通道,找找异同点: BIO: 1. public class SocketServer {    public ...

  6. Java NIO学习系列四:NIO和IO对比

    前面的一些文章中我总结了一些Java IO和NIO相关的主要知识点,也是管中窥豹,IO类库已经功能很强大了,但是Java 为什么又要引入NIO,这是我一直不是很清楚的?前面也只是简单提及了一下:因为性 ...

  7. Java NIO学习笔记九 NIO与IO对比

    Java NIO与IO Java nio 和io 到底有什么区别,以及什么时候使用nio和io,本文做一个比较. Java NIO和IO之间的主要区别 下表总结了Java NIO和IO之间的主要区别, ...

  8. Java中的IO、NIO、File、BIO、AIO详解

    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?         Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包 ...

  9. java 的nio与io对比

    转:本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提 ...

随机推荐

  1. 小白学 Python 爬虫(16):urllib 实战之爬取妹子图

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  2. iOS开发-KVO的奥秘

    转自:http://www.jianshu.com/p/742b4b248da9 序言 在iOS开发中,苹果提供了许多机制给我们进行回调.KVO(key-value-observing)是一种十分有趣 ...

  3. 2018HDU多校训练一 A - Maximum Multiple

    Given an integer nn, Chiaki would like to find three positive integers xx, yy and zzsuch that: n=x+y ...

  4. ARTS-S pytorch中Conv2d函数padding和stride含义

    padding是输入数据最边缘补0的个数,默认是0,即不补0. stride是进行一次卷积后,特征图滑动几格,默认是1,即滑动一格.

  5. Java实现数列的排列组合

    定义: 排列:从给定个数的元素中取出指定个数的元素,进行排序 组合:从给定个数的元素中仅取出指定个数的元素,不考虑排序 公式: 从n个元素中取出m个元素进行排序的个数: A(m,n)=n(n-1)(n ...

  6. 文件(图片)转base64

    普通图片转base64 function getBase64(url, callback){ var canvas = document.createElement('canvas'),//创建can ...

  7. Vue-兄弟组件传值

    学习博客:https://www.jianshu.com/p/b10b3ac3729a

  8. Vue中slot插槽的使用

  9. Test 1022

    T1 AERODROM (二分答案 TimeLimit: 1000MS Memory Limit: 32768KB \(N\)个登机口,办理登机业务,第\(i\)个窗口的单位办理时间为\(T_i\), ...

  10. CodeForces - 1073D Berland Fair

    XXI Berland Annual Fair is coming really soon! Traditionally fair consists of nnbooths, arranged in ...