当前位置: 首页 > 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的源码过程中可以参考。本文未涉及实例应用以及源码分析,等总结归纳好之后再进行这方面的文章编写。

http://www.lryc.cn/news/413578.html

相关文章:

  • 虚拟机与服务器的区别是什么?虚拟机与服务器的区别和联系
  • Linux CentOS stream9 命令
  • JavaScript基础——JavaScript变量声明
  • ModuleNotFoundError: No Module Named openai
  • 基于SpringBoot+Vue的校园便利平台(带1w+文档)
  • 串口应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
  • Canvas实现截图
  • Python高性能计算:进程、线程、协程、并发、并行、同步、异步
  • kafka基本操作
  • JavaFX布局-Accordion
  • 【轨物方案】评估光伏组件发电性能一致性方案
  • 安全基础学习-keil调试汇编代码
  • Unity复制对象时让私有变量也被复制的简单方法
  • Flink 实时数仓(二)【DIM 层搭建】
  • 知识图谱开启了一个可以理解的人工智能未来
  • 借助Aspose.html控件, 将SVG 转PNG 的 C# 图像处理库
  • vs-2015安装教程
  • Stable Diffusion绘画 | 文生图设置详解—随机种子数(Seed)
  • 56、php实现N的阶乘末尾有多个0
  • 混合域注意力机制(空间+通道)
  • springboot长春旅游安全地图平台-计算机毕业设计源码90075
  • apex正则表达式匹配富文本字段内容,如何只匹配文本而忽略富文本符号
  • 空气净化器对去除宠物毛有效吗?小型猫毛空气净化器使用感受
  • vue的nextTick是下一次事件循环吗
  • 5.4.软件工程-系统设计
  • Apache Kylin与BI工具集成:数据可视化实战
  • 通过idea图形化界面就能push到github流程
  • C语言初阶(10)
  • Javaweb用过滤器写防跳墙功能和退出登录
  • 小试牛刀-Telebot区块链游戏机器人(TS升级)