原创

什么是NIO

什么是NIO

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。

IO

NIO

面向流(Stream Oriented)

面向缓冲区(Buffer Oriented)

阻塞IO(Blocking IO)

非阻塞IO(NonBlocking IO)

选择器(Selectors)

底层原理可见:操作系统-文件IO

缓冲区(Buffer)

缓冲区类型

Buffer 就像一个数组,可以保存多个相同类型的数据。根据数据类型不同(boolean 除外) ,有以下Buffer 常用子类

  • ByteBuffer
  • CharBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer

各种类型的缓冲区中,都有一个对应类型的数组,如

ByteBuffer

final byte[] hb;                  // Non-null only for heap buffersCopy

IntBuffer

final int[] hb;                  // Non-null only for heap buffers

获取缓冲区

通过allocate方法可以获取一个对应缓冲区的对象,它是缓冲区类的一个静态方法

// 获取一个容量大小为1024字节的字节缓冲区
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

核心属性

缓冲区的父类Buffer中有几个核心属性,如下

// Invariants: mark <= position <= limit <= capacity
private int mark = -1;
private int position = 0;
private int limit;
private int capacity;Copy
  • capacity:缓冲区的容量。通过构造函数赋予,一旦设置,无法更改
  • limit:缓冲区的界限。位于limit 后的数据不可读写。缓冲区的限制不能为负,并且不能大于其容量
  • position:下一个读写位置的索引(类似PC)。缓冲区的位置不能为负,并且不能大于limit
  • mark:记录当前position的值。position被改变后,可以通过调用reset() 方法恢复到mark的位置。

以上四个属性必须满足以下要求

mark <= position <= limit <= capacity

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

关注作者,阅读全部精彩内容

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 什么是BIO、NIO和AIO?

    周末午后,在家里面进行电话面试,我问了面试者几个关于IO的问题,其中包括什么是BIO、NIO和AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是...

    乔戈里
  • 漫话:如何给女朋友解释什么是BIO、NIO和AIO?

    周末午后,在家里面进行电话面试,我问了面试者几个关于IO的问题,其中包括什么是BIO、NIO和AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是...

    Java技术江湖
  • 漫话:如何给女朋友解释什么是 BIO、NIO 和 AIO?

    周末午后,在家里面进行电话面试,我问了面试者几个关于 IO 的问题,其中包括什么是 BIO、NIO 和 AIO?三者有什么区别?具体如何使用等问题,但是面试者回...

    沉默王二
  • Java nio 空轮询bug到底是什么

    epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说。其高效的原因是将基于事件的fd放到内核中来完成,在内核中基于红黑树+链...

    luoxn28
  • NIO的好处,Netty线程模型,什么是零拷贝

    Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不...

    lyb-geek
  • 什么是RPC? RPC是什么?

    服务提供者提供 —- 消费者消费 服务提供者在青岛捞海鲜,消费者坐在新疆的餐馆里点了一盘麻辣小龙虾 这中间的过程就是RPC

    星尘的一个朋友
  • 什么是Hadoop?什么是HDFS?

    什么是Hadoop?什么是HDFS?马 克-to-win @ 马克java社区:Hadoop是Apache基金会开发的一个分布式系统基础架构。比如前面我们接触的...

    马克java社区
  • 基本概念RNA是什么?cDNA是什么?内参是什么? real time PCR 是什么?

    1、基本概念RNA是什么?cDNA是什么?内参是什么? real time PCR 是什么?

    微点
  • 什么是类?什么又是对象?

    面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。

    以谁为师
  • 什么是DBMS,什么是数据库?

    马克-to-win:DBMS (database management system---数据库管理系统)像mysql,oracle,sql server之类,...

    马克java社区
  • 什么是成熟?什么是世故?

    生活或者职场中,都希望自己越来越成熟,但什么才是成熟,有没有一套方法论,来时刻提醒自己,约束自己的行为和思想。

    刘盼
  • 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐...

    小曾看世界
  • 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐...

    梁规晓
  • 什么是DC,什么是兼容性DC

    DC全称为Device Content,翻译过来是“设备描述表”或者“设备上下文”。显示图片时都会用到,为什么呢?首先,没有一句C语言可以帮助我们在屏幕上显示图...

    用户2965768
  • 什么是架构,什么是架构师?

    作者|王晓波 编辑|韩婷 什么是架构,什么是架构师?这似乎是聊架构话题时永恒的问题。 从内心讲我真的不想回答架构具体需要做什么,架构师应该具体负责什么。因为从实...

    程序员小王
  • 什么是架构,什么是架构师?

    从内心讲我真的不想回答架构具体需要做什么,架构师应该具体负责什么。因为从实际情况看,在不同的系统层级,不同的需求下架构师的职责也会不同;从不同的技术角度看,架构...

    Java架构师必看
  • Spring杂谈 | 什么是ObjectFactory?什么是ObjectProvider?

    这个接口的定义非常简单,就是一个对象工厂,定义了一个返回对象的工厂方法。回顾我们直接介绍过的一个内容FactroyBean,其接口定义如下:

    程序员DMZ
  • 什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系?

    CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输入输出规范,用户的请求通过WEB服务器转发给FastCGI进程;

    joshua317
  • 你知道IO与NIO有什么区别吗?

    阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时:

    Java深度编程

扫码关注云+社区

领取腾讯云代金券