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

文章目录

  • NIO概述
    • NIO简介
    • NIO的特性/NIO与IO区别
    • 读数据和写数据方式:
    • NIO核心组件简单介绍
  • Java NIO 之 Buffer(缓冲区)
    • Buffer(缓冲区)介绍
    • Buffer的常见方法
    • Buffer的使用方式/方法介绍
    • Buffer常用方法测试
  • Java NIO 之 Channel(通道)
  • Java NIO之 Selector(选择器)
    • Selector(选择器)介绍
    • Selector(选择器)的使用方法介绍
    • 模板代码
  • Java NIO之拥抱Path和Files
  • NIO学习总结以及NIO新特性介绍
  • AsynchronousFileChannel异步文件通
  • 本文小结

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相关的知识与内容。

JAVA NIO基础知识相关推荐

  1. Java SE 基础知识

    Java SE 基础知识 1 2 @(Notes)[J2SE, Notes] VICTORY LOVES PREPARATION. 特别说明: 该文档在马克飞象查阅最佳: 本部分知识还在迭代中,欢迎补 ...

  2. java培训基础知识都学哪些

    很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...

  3. 你觉得什么才是 Java 的基础知识?

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...

  4. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

  5. java ee基础知识_Java EE:基础知识

    java ee基础知识 想要了解一些基本原则,即与Java EE相关的技术术语. 对于许多人来说,Java EE / J2EE仍然最多意味着Servlet,JSP或Struts. 没有冒犯或双关语! ...

  6. hashcode是什么意思_什么才是 Java 的基础知识?

    作者:晓风轻 链接:zhuanlan.zhihu.com/p/28615617 近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java ...

  7. java 反射基础知识

    java 反射 基础知识 反射:reflection 反射关键类 java 反射部分应用 反射:reflection 在运行中分析类. 在运行中查看和操作对象. 基于反射自己创建对象. 调用不可以访问 ...

  8. Java 进阶基础知识

    我断断续续花费一周的时间整理了这份 Java 进阶基础知识的思维导图.以前觉得这是一个简单的事情,感觉不就是跟着书上的知识点抄一遍嘛,但真的自己动手写过后,才发现并不是那么一回事. 说说自己整理心得吧 ...

  9. java类与接口思维导图_详解java接口基础知识附思维导图

    接口: 官方的含义是---->java接口是一系列方法的声明,是一些方法特征的集合 疑问: 那为什么不用抽象类呢?把他们共有的方法集合起来放在一个抽象类里面,同样可以调用哇,但是反过来想一想如果 ...

最新文章

  1. Yii2 HOW-TO(3):调试工具yii2-debug和Xdebug(失败)
  2. jQuery |添加标签元素/内容
  3. uni.request接口封装;小程序uni-app接口封装
  4. makefile之引用(3)
  5. spring data jpa封装specification实现简单风格的动态查询
  6. 妙啊,小米11保护壳先小米11一步上市了...
  7. Java 程序 ——感想
  8. 基于深度学习的计算机视觉技术在无人驾驶中的应用
  9. 高中同窗被叫“码子”的!如今转行软件测试,不止是年轻,还有拼搏的勇气
  10. wgan 不理解 损失函数_[图像盲去噪与GAN]GCBD翻译理解
  11. HDU - 1286 找新朋友(欧拉函数)解题
  12. 190507每日一句
  13. roseha linux,ROSEHA双机软件图解安装配置linux.docx
  14. 网上交易安全-使用JAVA调用U盾进行客户认证
  15. 大数运算——模加减运算
  16. 使用matplotlib动态打印图片(RGB图片)
  17. 手把手教如何修改运动步数
  18. 解决Wireshark抓包跟踪流后http的响应正文乱码
  19. 谭浩强c语言第五版视频,张子枫平胸
  20. classD类和classAB类功放区别

热门文章

  1. ceph升级到10.2.3 版本启动服务报错:Unknown lvalue 'TasksMax' in section 'Service'
  2. linux命令-tar命令
  3. Apache + Tomcat集群配置详解(1)
  4. 本周任务asp.net 1.1老系统移植升级到asp.net 2.0,又是一个浩大的工程啊?
  5. Python培训 之五 条件判断
  6. linux gcc 静态 动态链接库
  7. 【leetcode】33. Search in Rotated Sorted Array
  8. iOS 文字样式处理总结(字体、前背景色、斜体、加粗、对齐、行间距、段间距、动态获取字符串label宽高等)...
  9. 注解的原理又是怎么一回事
  10. XPath CheatSheet