1、nio说明 和 对比bio
nio和bio的区别
bio:
- 面向流的。
- 单向的。
- 阻塞的,这也是b这个的由来。
nio:
- 面向块的。(buffer)
- 双向的。
- 非阻塞的。同步的编程方式。是一种select模型
nio编程的常规步骤
从channel中获取的任何数据,都必须经过buffer来存放。
- 获取到channel。这里如果是从流中获取的channel,那么channel,也只支持单向。
- 构建Buffer
- 数据塞到Buffer中,如果是写回操作,执行flip
- 写回或读取
Buffer 的使用
buffer中的3个核心变量,和一个不常用的变量(mark):
- mark 设置标记,记下position的位置 ,用reset方法,可以返回这
- posotion 读写的位置,下一个要读和写的位置。
- limit 可读或可写的最大值,下一个不可读或不可写的元素下标。
- capacity buffer的最大值,创建之后就不会变。
、
直接内存映射,零拷贝:
常规的java流操作过程:
- 将数据从jvm中,拷贝到堆外内存,jvm中,仅保存地址。
- 修改堆外的数据块,写入,读取。
- 将堆外内存,变化的,再拷回jvm的内存中。
buffer有一个直接内存映射的buffer,叫DirectByteBuffer,通过DirectByteBuffer可以将数据库块直接放在jvm堆外的内存中,使得操作数据时,不需要将内存数据,从jvm中拷贝到堆外内存中。
可以通过调用buffer的map方法,获得一个内存中的buffer。直接操作buffer,相当于操作原文件。
1、nio说明 和 对比bio的更多相关文章
- Java--Stream,NIO ByteBuffer,NIO MappedByteBuffer性能对比
目前Java中最IO有多种文件读取的方法,本文章对比Stream,NIO ByteBuffer,NIO MappedByteBuffer的性能,让我们知道到底怎么能写出性能高的文件读取代码. pack ...
- 12、NIO、AIO、BIO一
1.NIO概述 什么是NIO:NIO是New I/O的简称,与旧式的基于流的I/O方式相对,从名字看,他表示新的一套JAVA I/O标准.它是在java1.4中被纳入到JDK中的,并具有以下特性: - ...
- Java NIO 学习笔记(七)----NIO/IO 的对比和总结
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- c.BIO连接器与NIO连接器的对比
前面两节,我们分别看了BIO和NIO的两种模式Tomcat的实现方式. BIO的方式,就是传统的一线程,一请求的模式,也就是说,当同时又1000个请求过来,如果Tomcat设置了最大Accept线程数 ...
- d.BIO连接器与NIO连接器的对比之二
前面在Tomcat中讲解了两个通道,BIO和NIO,我们这里来通过两端程序,简单模拟两个通道,找找异同点: BIO: 1. public class SocketServer { public ...
- Java NIO学习系列四:NIO和IO对比
前面的一些文章中我总结了一些Java IO和NIO相关的主要知识点,也是管中窥豹,IO类库已经功能很强大了,但是Java 为什么又要引入NIO,这是我一直不是很清楚的?前面也只是简单提及了一下:因为性 ...
- Java NIO学习笔记九 NIO与IO对比
Java NIO与IO Java nio 和io 到底有什么区别,以及什么时候使用nio和io,本文做一个比较. Java NIO和IO之间的主要区别 下表总结了Java NIO和IO之间的主要区别, ...
- Java中的IO、NIO、File、BIO、AIO详解
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包 ...
- java 的nio与io对比
转:本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提 ...
随机推荐
- luogu P2650 弹幕考察
题意简化:求某个区间在一组区间中覆盖的数量 对于这个问题,我们很容易想到线段树,或者树状数组,但是maxlongint不能让我们这么做 30分思路: 对于m个区间,枚举n个区间判断与它是否重合 但是O ...
- swift实现单例的四种方式
单例模式 单例模式是设计模式中最简单的一种,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象. 当你只需要一个实例的时候需要使用单例 ...
- python scapy的使用总结
基本命令 ls() List all available protocols and protocol options lsc() List all available scapy command f ...
- 1010 Radix (25 分),PTA
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 题意:给定n1.n2两个数,求可以是两 ...
- HDU1561 The more ,The better (树形背包Dp)
ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先 ...
- qrcode.js生成二维码因字符串过长而报错
前端使用qrcode.js生成二维码的时候.有时候是会出现 qrcode length overflow (1632>1056) 目前使用的有效的解决办法是重新下载新版的qrcode.js 下载 ...
- Windows安装MSYS2_切换zsh_整合cmder
MSYS2是什么 MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境.同时它也是一个在Cygwin (POSIX 兼容性层) 和 Mi ...
- 小白的springboot之路(十)、全局异常处理
0.前言 任何系统,我们不会傻傻的在每一个地方进行异常捕获和处理,整个系统一般我们会在一个的地方统一进行异常处理,spring boot全局异常处理很简单: 介绍前先说点题外话,我们现在开发系统,都是 ...
- 一篇文章搞清楚HashMap和TreeMap的内部结构
一.HashMap 1.基于哈希表的 Map 接口的实现. 此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Has ...
- 深入浅出分析 PriorityQueue
一.摘要 在前几篇文章中,咱们了解到,Queue 的实现类有 ArrayDeque.LinkedList.PriorityQueue. 在上一章节中,陆续的介绍到 ArrayDeque 和 Linke ...