Java IO NIO底层原理与使用
像风一样自由
Javaweb程序员喜欢各种技术
展开
-
【IO专栏】I/O 阻塞 、非阻塞、同步、异步总结
IO非JAVA独有的,想要搞明白这些原理要从根来说起,根其实就是操作系统 UNIX操作系统下面,I/O 分为5种,同步阻塞I/O;同步非阻塞IO;I/O多路复用;信号驱动I/O;异步I/O 这些名字经常听到,常常是感觉自己懂了,但是真正聊起来的时候,又不能几句话清除明了的表达出来。带着以下问题来梳理上面的名字 1.这些I/O模型有什么区别? 2.同步和阻塞似乎是同一回事,到底有啥不同? 3.什么是I/O 4.为啥需要I/O I/O 定义 所谓I/O就是计算机内存与外部设备拷贝数据的过程,我们原创 2020-08-17 23:57:47 · 342 阅读 · 0 评论 -
【IO专栏】select函数以及fd_set结构体解析
I/O 多路复用的设计初衷就是解决这样的场景。我们可以把标准输入、套接字等都看做 I/O 的一路,多路复用的意思,就是在任何一路 I/O 有“事件”发生的情况下,通知应用程序去处理相应的 I/O 事件,这样我们的程序就变成了“多面手”,在同一时刻仿佛可以处理多个 I/O 事件。 select 函数就是这样一种常见的 I/O 多路复用技术,我们将在后面继续讲解其他的多路复用技术。使用 select 函数,通知内核挂起进程,当一个或多个 I/O 事件发生后,控制权返还给应用程序,由应用程序进行 I/O 事件的原创 2020-09-08 23:16:58 · 699 阅读 · 0 评论 -
【IO专栏】003网络IO工作机制
网络IO的工作机制 数据从一台主机发送到网络中的另外一台主机需要经过很多步骤。首先需要有相互沟通的意向。其次要有能够沟通的物理渠道(物理链路):是通过电话,还是直接面对面交流。再次,双方见面时语言要能够交流,而且双方说话的步调要一致,明白什么时候该自己说话,什么时候该对方说话(通信协议)。重点介绍通信协议和如何完成数据传输。 1.TCP状态转化 (1)CLOSED:起始点,在超时或者链接关闭的时候进入此状态。 (2)LISTEN:Server端在等待链接时的状态...原创 2020-08-27 22:22:51 · 154 阅读 · 0 评论 -
【IO专栏002】JAVA I/O的工作机制
1.引言 I/O问题是任何编程语言都无法回避的问题,可以说I/O问题是整个人机交互的核心问题,因为I/O是机器获取和交换信息的主要渠道。 2.JAVA I/O 操作类 概括 基于字节操作的I/O接口:InputStream 和OutputStream 基于字符操作的I/O接口:Write 和Reader 基于磁盘操作的I/O接口:File 基于网络操作的I/O接口:Socket 前两组主要是出阿叔数据的数据格式,后两组主要是传输数据的方式,虽然Socket累并不在java.io包下,但是也仍然需原创 2020-08-27 00:02:04 · 84 阅读 · 0 评论 -
【IO专栏】多线程的Reactor反应器模式
书接上篇: 既然Reactor反应器和Handler处理器,挤在一个线程中会造成非常严重的性能缺陷。那么,可以使用多线程,对基础的反应器模式进行改造和演进。 多线程池Reactor 反应器演进 多线程池Reactor反应器的演进,分为两个方面: (1)首先是升级Handler处理器。即要使用多线程,又要尽可能的高效率,则可以考虑使用线程池。 (2)其次是升级Reactor反应器。可...原创 2020-05-04 10:15:53 · 304 阅读 · 0 评论 -
【IO专栏】单线程Reactor反应器模式
总体来说,Reactor反应器模式有点类似事件驱动模式。 在事件驱动模式中,当有事件触发时,事件源会将事件dispatch分发到handler处理器进行事件处理。反应器模式中的反应器角色,类似于事件驱动模式中的dispatch事件分发器的角色。 在反应器模式中有Reactor反应器和Handler处理器连个重要的组件: (1)Reactor反应器:负责查询IO事件,当检测到一个IO事件,将其...原创 2020-05-04 10:09:19 · 241 阅读 · 0 评论 -
【IO专栏】Buffer相关知识点详解【003】
原创 2020-05-01 16:15:21 · 219 阅读 · 0 评论 -
【IO专栏】Java OIO NIO通信对比分析【002】
在1.4版本之前,Java IO类库是阻塞IO;从1.4版本开始,引入了新的异步IO库,被称为Java new IO 类库,new IO 类库的目标,就是要让Java支持非阻塞IO,基于这个原因更多人喜欢称JAVA NIO为非阻塞IO(Non-Block IO),称为“老的”阻塞式JAVA IO为OIO (Old IO).总体上说,NIO弥补了原来面向流的OIO同步阻塞的不足,它为标准Java代码...原创 2020-04-30 23:12:11 · 333 阅读 · 0 评论 -
【IO专栏】Java IO 分析之高并发IO的底层原理【001】
大家都知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用。在不同操作系统中,IO读写的系统调用的名称可能完全不一样,但是基本功能是一样的。 这里涉及到一个基础的知识点:read系统调用,并不是直接从屋里设备把数据读取到内存中;write系统调用,也不是直接把数据写入到物理设备。上层应用无论是调用操作系统的rad,还是调用操作系统的wri...原创 2020-04-30 23:00:57 · 231 阅读 · 0 评论