Java连载150-NIO详解(一)

Java连载150-NIO详解(一)

一、IO原理

1.底层原理

  • 操作系统在进行IO的时候,实际上并不是即时操作,它们是通过缓冲区的,也就是说,我们读写文件都是通过一个中介来进行的。读系统就是把内核缓存区的内容复制到进程缓冲区;写系统就是把进程缓冲区的内容复制到内核缓存区。
  • 之所以这样做的原因是避免大量的IO操作,大量的IO操作效率是很低的。这个过程并不等价于数据在内核缓冲区和磁盘之间的交换。

Java连载150-NIO详解(一)

2.

  • NIO和IO的实现方式有所不同,NIO实在JDK1.4之后引入的,采用的是块的实现方式,而IO采用流的实现方式

3.提供了两套API实现方式

  • 标准输入输出的NIO
  • 网络编程的NIO

4.流与块的优缺点

  • 基于流的IO,速度慢,但是为流式数据提供过滤器
  • 基于块的IO,速度快,但是缺乏像流的雅兴和简单性

5.Buffer读取数据的步骤

  • 将数据读取到buffer之中(buffer会记录写入了多少数据)
  • 调用flip()方法(将buffer从写模式变成读模式)
  • 在buffer中读取数据
  • 调用clear()或者compact()方法(clear() 方法会清空整个缓冲区。compact() 方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。)

6.关于Channel

  • 对Channel的读写必须通过buffer
  • Channel是可以异步读写的
  • Channel是双向的,既可以读又可以写

7.NIO中的Channel有如下几种

  • FileChannel,文件中读取数据
  • DatagramChannel,读写UDP网络协议数据
  • SocketChannel,读写TCP网络协议数据
  • SocketServerChannel,可以监听TCP网络协议数据

二、源码:

posted on
2021-12-13 00:13 心悦君兮君不知-睿

阅读(
125

) 评论(
) 编辑

Original: https://www.cnblogs.com/ruigege0000/p/15681242.html
Author: 心悦君兮君不知-睿
Title: Java连载150-NIO详解(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607924/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Go语言中的函数及import导包

    一、函数的写法 1.基本写法: 类似:func 函数名 (a 数据类型, b 数据类型) 返回值类型{ //……. return c 2.多返回值,匿名:多…

    Java 2023年6月13日
    093
  • 小细节bug SpringCloud使用Feign项目启动报错 找不到Bean

    前言:记录一下工作中的小bug在微服务中用feign实现使用声明式的方法去远程接口调用但是在调用端 项目启动报错Bean未找到 检查步骤 检查springboot启动类是否标注@E…

    Java 2023年6月9日
    070
  • JAVA的类型转换(基本类型)

    类型转换 由于java是强类型语言,所以在进行某些运算的时候,需要用到类型转换。 低–>高指的是字节大小,从小到大。 小数的优先级大于整数 数值进行类型转换时不要…

    Java 2023年6月9日
    089
  • mysql安装提示start service失败

    由于之前安装过mysql(win7、64位),卸载时没有删除干净mysql相关的东西,导致下次安装时提示start service,安装失败。 解决办法: 1、先卸载mysql,然…

    Java 2023年6月5日
    091
  • Java四大引用详解:强引用、软引用、弱引用、虚引用

    面试官考察Java引用会问到强引用、弱引用、软引用、虚引用,具体有什么区别?本篇单独来详解 @mikechen Java引用 从JDK 1.2版本开始,对象的引用被划分为4种级别,…

    Java 2023年6月15日
    0102
  • 企业级微服务API网关Fizz-常用插件介绍

    前言 社区贡献的插件在 https://github.com/orgs/wehotel/repositories?type=all 下,一般以 fizz-plugin- 或 fiz…

    Java 2023年6月9日
    084
  • Java多线程与线程池技术

    一、序言 Java多线程编程线程池被广泛使用,甚至成为了标配。 线程池本质是 池化技术的应用…

    Java 2023年6月6日
    096
  • Nacos (Spring Cloud) 注册中心与配置中心

    Nacos 是什么 Nacos (Dynamic Naming and Configuration Service),其命名由三部分组成: Na (naming/nameServe…

    Java 2023年6月16日
    062
  • 二叉树的遍历

    二叉树的遍历 递归、迭代 //前序遍历 public List preorder(TreeNode root,List list){ if(root == null){ retur…

    Java 2023年6月7日
    078
  • ElasticSearch(三)SpringBoot 整合ES

    ElasticSearch(三)SpringBoot 整合ES 使用Java API 这种方式,官方已经明确表示在ES 7.0 版本中弃用 TransportClient 客户端,…

    Java 2023年6月5日
    0117
  • 来吧,自己动手撸一个分布式ID生成器组件

    在经过了众多轮的面试之后,小林终于进入到了一家互联网公司的基础架构组,小林目前在公司有使用到架构组研究到分布式id生成器,前一阵子大概看了下其内部的实现,发现还是存在一些架构设计不…

    Java 2023年5月29日
    072
  • idea快捷键

    常用快捷键 https://mp.weixin.qq.com/s/-rB1AdCRUkryhKcdb96heg Original: https://www.cnblogs.com/…

    Java 2023年6月7日
    083
  • 修饰符-static

    Java是由C/C++泛生的,其也保留了C/C++的部分特性,如关键字。在C/C++中,关键字有着特殊的含义。 在日常使用中关键字 static一般用来修饰类的属性和方法,而被st…

    Java 2023年6月5日
    095
  • SpringCloud01

    SpringCloud01 淘宝架构演进之路 https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=224748542…

    Java 2023年6月13日
    078
  • Redis的字符串底层是啥?为了速度和安全做了啥?

    面试官:Redis有哪些数据类型? 我:String,List,set,zset,hash 面试官:没了? 我:哦哦哦,还有HyperLogLog,bitMap,GeoHash,B…

    Java 2023年6月9日
    058
  • World Wind JAVA亮相JavaOne,Google Earth和Virtual Earth最大竞争对手

    讯,一直出于半秘密 状态的World Wind 近日在JavaOne上亮相,news.com的报道称 地球 Earth和Virtual Earth最大竞争对手。和.net版本不同,…

    Java 2023年5月29日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球