当前位置: 首页 > news >正文

JDK-java.nio包详解

JDK-java.nio包详解

概述

        一直以来Java三件套(集合、io、多线程)都是最热门的Java基础技术点,我们要深入掌握好这三件套才能在日常开发中得心应手,之前有编写集合相关的文章,这里出一篇文章来梳理一下io相关的知识点。

一、源码包简单介绍

        JDK中io有两类包:io、nio,其中IO使用流的方式处理文件,包括输入输出两种IO流,每种输入输出流又可分为字节流和字符流两大类。NIO采用内存映射文件来处理输入输出,NIO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了。Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。其中io和nio的区别如下:

1、io核心概念

(1)输入输出流

    输入流以InputStream和Reader作为基类,而输出流以OutputStream和Writer作为基类。

(2)字节流和字符流

    字节流:InputStream,OutputStream

    字符流:Reader,Writer

2、nio核心概念

(1)Channel(通道):Channel是对传统的输入输出系统的模拟,在NIO系统中所有的数据都需要通过通道传输。

(2)  Buffer(缓冲区):缓冲区(Buffer)是一个包含数据(通常是原始数据如字节)的容器,并提供了一组方法,用于追踪和操作缓冲区中的数据。本质是一个数组,发送到Channel中所有的对象都必须首先放到Buffer中,从Channel中读取的数据也必须先放到Buffer中。

(3)Selector(选择器): 一般称 为选择器 ,当然你也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。

二、源码包中核心类设计

1、io包核心类设计

        前面讲到io流主要分为输入输出流,而输入输出流又分为字符流和字节流,下面我们先看一下输入流的类设计:

        如下图所示是输出流核心类设计:

2、nio包核心类设计

        上面讲到nio有三个核心类:Channel(通道)、Buffer(缓冲区)、Selector(选择器),而这三个核心类的设计如下图所示:

总结

        本文介绍了Java io流的核心设计,java1.4之前只提供了io流的模式,之后推出了nio,文中也对io和nio做了简单的对比。第二小节是对io和nio中核心类的设计做了总结归纳,大家在看jdk的源码过程中可以参考。本文未涉及实例应用以及源码分析,等总结归纳好之后再进行这方面的文章编写。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 我出一道面试题,看看你能拿 3k 还是 30k!
  • 2024 年最值得阅读的 10 个外国技术网站
  • Linux网络-小结
  • mysql 分析慢查询
  • Opencv学习-图像翻转变换
  • SSM学生选课系统-计算机毕业设计源码99890
  • 中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题
  • <Qt> 常用控件
  • 使用labelme生成mask数据集(亲测可行)
  • 《学会 SpringMVC 系列 · 写入拦截器 ResponseBodyAdvice》
  • 《LeetCode热题100》---<5.③普通数组篇五道>
  • cf935:D.Seraphim the Owl(贪心)
  • c++入门基础(下篇)————引用、inline、nullptr
  • 爬虫:xpath模块及昵图网实例
  • 宏编程:C++宏、Rust宏和Lisp宏比较
  • Android组件 - 收藏集 - 掘金
  • extract-text-webpack-plugin用法
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java 网络编程(2):UDP 的使用
  • Node + FFmpeg 实现Canvas动画导出视频
  • vue自定义指令实现v-tap插件
  • 初识MongoDB分片
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 近期前端发展计划
  • 经典排序算法及其 Java 实现
  • 前端性能优化——回流与重绘
  • 数组大概知多少
  • 详解NodeJs流之一
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ​Linux·i2c驱动架构​
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (1)(1.11) SiK Radio v2(一)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (原)Matlab的svmtrain和svmclassify
  • (转载)Google Chrome调试JS
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • . Flume面试题
  • .dwp和.webpart的区别
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core docker部署教程和细节问题
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net framework4与其client profile版本的区别
  • .NET Micro Framework初体验
  • .Net Remoting常用部署结构