JAVA分享篇(3)基础知识大总结

Java I/O

是Input/Output的缩写,用于处理设备之间的数据传输,如读/写文件,网络通讯等。Java程序中对于数据的输入/输出操作以“流(stream)”的方式进行。

java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。

输入input:读取外部数据(程序、网络、磁盘、光盘等存储设备的数据)到程序(内存)中。

输出output:将程序(内存)数据输出到网络、磁盘、光盘等存储设备中。

Socket

是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象称呼。

一个套接字就代表是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。

从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。

Socket是基于网络传输协议的(分UDP和TCP协议),这里说一下基于TCP/IP协议的Socket通信模型:

Socket通信实现步骤解析:

Step 1:创建ServerSocket和Socket

Step 2:打开连接到的Socket的输入/输出流

Step 3:按照协议对Socket进行读/写操作

Step 4:关闭输入输出流,以及Socket

至此我们知道I/O就是 Input/Output的缩写,用于各方面的数据传输操作,磁盘数据到内存,内存数据到程序,程序数据到网络等,可以说有数据传输的地方就有I/O操作。

接下来进入主题

我们针对linux操作系统而言,程序进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer

整个请求过程为:程序进程发起请求,内核接受到请求后,从I/O设备中获取数据到buffer中,再将buffer中的数据copy到程序进程的地址空间,该程序进程获取到数据后再响应客户端。

在整个请求过程中,数据输入至buffer需要时间,而从buffer复制数据至进程也需要时间。

因此根据在这两段时间内等待方式的不同,I/O动作可以分为以下五种模式:

■ 阻塞I/O (Blocking I/O)

■ 非阻塞I/O (Non-Blocking I/O)

■ I/O复用(I/O Multiplexing)

■ 信号驱动的I/O (Signal Driven I/O)

■ 异步I/O (Asynchrnous I/O) 

由于篇幅原因我这里只拿前两种来细说,对其他有兴趣的可自行查阅其他资料。

免责声明:部分文章信息来源于网络以及客户意见反馈,本站只负责对文章进行整理、排版、编辑,出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系本站,我们会尽快联系您处理。

你可能感兴趣的:(JAVA知识分享,java,开发语言)