JAVA NIO基础知识

本文来说下JAVA NIO基础知识。


NIO概述

NIO简介

New I/O,原因在于它相对于之前的I/O类库是新增的。由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O,所以,更多的人喜欢称之为非阻塞I/O(Non-block I/O)。

在这里插入图片描述


NIO的特性/NIO与IO区别

  • 1)IO是面向流的,NIO是面向缓冲区的;
  • 2)IO流是阻塞的,NIO流是不阻塞的;
  • 3)NIO有选择器,而IO没有。

读数据和写数据方式:

  • 从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据。
  • 从通道进行数据写入 :创建一个缓冲区,填充数据,并要求通道写入数据。

NIO核心组件简单介绍

  • Channels
  • Buffers
  • Selectors

Java NIO 之 Buffer(缓冲区)

Buffer(缓冲区)介绍

  • Java NIO Buffers用于和NIO Channel交互。 我们从Channel中读取数据到buffers里,从Buffer把数据写入到Channels;
  • Buffer本质上就是一块内存区;
  • 一个Buffer有三个属性是必须掌握的,分别是:capacity容量、position位置、limit限制。

Buffer的常见方法

  • Buffer clear()
  • Buffer flip()
  • Buffer rewind()
  • Buffer position(int newPosition)

Buffer的使用方式/方法介绍

分配缓冲区(Allocating a Buffer)

ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer为例子

写入数据到缓冲区(Writing Data to a Buffer)

写数据到Buffer有两种方法

1.从Channel中写数据到Buffer

int bytesRead = inChannel.read(buf); //read into buffer.

2.通过put写数据:

buf.put(127);

Buffer常用方法测试

说实话,NIO编程真的难,通过后面这个测试例子,你可能才能勉强理解前面说的Buffer方法的作用。


Java NIO 之 Channel(通道)

在这里插入图片描述


Java NIO之 Selector(选择器)

Selector(选择器)介绍

  • Selector 一般称 为选择器 ,当然你也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。
  • 使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。

Selector(选择器)的使用方法介绍

在这里插入图片描述


模板代码

有了模板代码我们在编写程序时,大多数时间都是在模板代码中添加相应的业务代码。


Java NIO之拥抱Path和Files

在这里插入图片描述


NIO学习总结以及NIO新特性介绍

内存映射

这个功能主要是为了提高大文件的读写速度而设计的。内存映射文件(memory-mappedfile)能让你创建和修改那些大到无法读入内存的文件。有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问了。将文件的一段区域映射到内存中,比传统的文件处理速度要快很多。内存映射文件它虽然最终也是要从磁盘读取数据,但是它并不需要将数据读取到OS内核缓冲区,而是直接将进程的用户私有地址空间中的一部分区域与文件对象建立起映射关系,就好像直接从内存中读、写文件一样,速度当然快了。


AsynchronousFileChannel异步文件通

Java7中新增了AsynchronousFileChannel作为nio的一部分。AsynchronousFileChannel使得数据可以进行异步读写。


本文小结

本文详细介绍了java nio相关的知识与内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值