• NIO的简介

1.java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO为所有的原始类型(boolean除外)提供了缓存支持 使用它 可以提供非阻塞式的高伸缩性网络
2.NIO由三个核心部分组成Channel 管道/通道 Buffer 缓冲区 Selector 选择器

普通IO        NIO
面向流        面向缓冲区
阻塞IO        非阻塞
没有选择器    选择器Selector

- 阻塞和非阻塞:
阻塞:

Scanner sc = new Scanner(System.in)
int i = sc.nextInt();

阻塞是强调运行结果 在返回之前 当前线程会被挂起 一直处于等待状态 不能执行其他任务 函数只有在得到结果之后 才会返回 阻塞式IO 指的是 “一旦输入/输出工作没有完成 则程序阻塞 直到输入/输出完成为止” 不见黄河不死心

非阻塞:

非阻塞和阻塞的概念是相对应的非阻塞IO其实并非完全非阻塞 通常情况下 都是通过设置超时来读取数据的未超时之前 程序阻塞超时之后 程序结束

Buffer:

缓冲区 本质上是一块可以存储数据的内存把这块区域封装成了一个Buffer对象Java NIO中涉及到的Buffer实现:

Selector:

实现监听的效果通过一个线程管理多个Channel从而管理多个网络连接的目的 它是Java NIO核心组件中的一个 用于检查一个或者多个NIO
Channel的状态是否处于可读 可写 我们可以将Channle注册到Selector中 以实现Selector对其管理的目的

- Buffer的使用
Java NIO 的Buffer 用于 和 NIO通道进行交互 数据从通道读入缓冲区 从缓冲区写出到通道中
- 常用方法:

allocate(大小) 分配一块指定大小的缓冲区
put() 向缓冲区写数据
get() 从缓冲区读数据
flip() 切换读写模式
clear() 清空
capacity() 获取缓冲区大小
position() 获取数据存储位置
limit() 长度

  • 作用:

1.将position设置为0
2.把limit设置为原position的值 存了多少数据

使用步骤:

1.创建Buffer缓冲区
2.写入数据到Buffer
3.调用flip()方法 切换读写模式
4.从Buffer中读取数据
5.调用clear()方法 清空缓冲区

  • FileChannel的使用

java NIO 中的FileChannel 是一个连接文件的通道可以通过通道 读写文件 在使用FileChannel之前 必须先打开它

方法:

1.可以通过 FileInputStream/FileOutputStream 来获取 FileChannel getChannel()方法
2.调用 FileChannel中的静态open()方法 打开通道 static FileChannel open(Path path,OpenOption...options);
Paths 工厂类中 的方法 static Path get(URI uri) 将给定的URI转换为Path对象。

  • 案例
    写入文本文件

    读取文本文件

    复制图片

Java基础入门(十八)之NIO相关推荐

  1. 夯实Java基础(十八)——泛型

    1.什么是泛型 泛型是Java1.5中出现的新特性,也是最重要的一个特性.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类. ...

  2. 重学java基础第十八课:卸载jdk和安装jdk

  3. JAVA 基础 / 第二十八课:接口与继承 / 如何设计JAVA的接口?

    2018-03-19 在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击.这时候,就可以使用接口来实现这个效果.  接口就像是一种约定,我们约定某些英雄是物理系英雄,那么 ...

  4. Java基础入门必备词汇汇

    #Java基础入门必备词汇汇 一 1.Public ['pʌblik] 公开 2.Static ['stætik] 静态 3.void [vɔid] 无返回 4.main [main] 主要的,主方法 ...

  5. Java 基础入门,小白提升路线图

    1000+最新Java面试题 获取学习路线资料啦 Java的基础知识就像我们所住的房子的地基,如果地基不稳,上面所盖的楼房再宏伟,也是没人敢去入住的,同理Java的基础不牢固,以后也很难成为真正意义上 ...

  6. Java基础入门--学习笔记

    Java基础入门教程 itheima–java基础小白教程 学习配套软件:eclipse 1.基础知识 (1)常用DOS命令:切换盘–>E:,cd–>进入文件,可多级,cd - --> ...

  7. Java基础入门-详细总结

    Java基础入门知识总结 一.java基础 1.1 java基础知识 1.2java的基本数据类型 1.3运算符 1.4循环结构 1.5数组 二.面向对象 2.1方法 2.2面向对象 2.3内存管理 ...

  8. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  9. java基础入门课后习题_《Java基础入门》课后习题及答案

    <Java基础入门>课后习题及答案Java基础入门,课后习题,答案 博学谷--让IT教学更简单,让IT学习更有效 <Java基础入门>课后习题 第1章Java开发入门 一.填空 ...

  10. 叮!您收到一份超值Java基础入门资料! 1

    Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家Java ...

最新文章

  1. [kuangbin带你飞]专题五 并查集 E - 食物链 (带权并查集)
  2. sql查两个时间内的数据_如何通过AWR的sql脚本查执行时间、消耗CPU、gets、I/0等的sql?...
  3. Python 技术篇-用os库实现删除本地文件、非空文件夹方法,python判断本地文件、文件夹是否存在方法
  4. 身边的设计模式(三):抽象工厂 与 依赖注入
  5. 历史上的今天:雅虎正式成立;PC 设计先驱诞生;Excite@Home 破产
  6. 据说学编程的计算这题不超1分钟!
  7. java核心技术卷2 第9版 pdf,Java核心技术 卷II 高级特性(原书第9版) PDF
  8. html 分割字符串,详解js常用分割取字符串的方法
  9. 数据库的基本操作和约束
  10. C语言程序设计实验报告——实验七
  11. Unity实现在白板上绘画涂鸦
  12. PDF文件如何编辑?这两种方法是我一直在用的
  13. 微信小程序答题页——swiper渲染优化及swiper分页实现
  14. 一步一步教你安装MeeGO和Windows 7双系统(上网本或笔记本)
  15. 一、jSP简介(前置知识)
  16. AD域实现统一用户管理
  17. Java字符串首尾显示,中间隐藏
  18. 会议及作用篇--项目管理(十七)
  19. JavaWeb学习之入门
  20. C# 飞行棋小游戏 (控制台应用)

热门文章

  1. C#获取gridview选择check打勾行数据
  2. kali linux不用网卡驱动,Kali Linux ——在无网络情况下安装无线网卡驱动
  3. GPS时间转化成标准时间格式
  4. 通达OA 与中控考勤机同步 最优http方案 附源码
  5. homeassistant智能家居
  6. vChain: Enabling Verifiable Boolean Range Queries over Blockchain Databases
  7. 电子计算机成为通用计算机器,第5讲程序与处理器.pptx
  8. 基于javaweb+jsp的工作日志管理系统
  9. 读书百客:《感遇·兰叶春葳蕤》赏析
  10. linux系统远程桌面