java学习总结(三)
Socket
概念:两个程序(进程)通过一个双向通信连接实现数据交换。这个双向连接的一端是一个socket(套接字)。
分类:1.面向连接(TCP)2.面向无连接(udp)
结构:每一个socket都是由ip地址和端口号唯一确定的。
生命周期:①打开socket ②收发数据③关闭socket
![v
NIO
我们知道传统socket就是使用socket(IP,端口号)连接服务端和服务端的ServerSocket.accept()侦听接收连接 来实现的。这种传统socket通信是阻塞式的,在多线程中效率低下。
比如说 已经建立的连接,服务端一直等待对于的客户端发送数据,这时候无法接收其他的客户端请求。
NIO 是非阻塞式的,它的出现是为了解决传统socket通信在多线程中效率低下的问题。JAVA中的NIO是使用 Channel(通道)、Selector(选择器)、缓冲区(Buffer)来实现的。
这里我们要回想一下之前的文章:java中除了基本类型其他的都是类。有时候我们看到这些名词(选择器、缓冲区、通道)就会脑袋一懵,但实际上想一想,这些都是类,里面肯定存储了某些类的属性,方法 来处理输入输出。
上述的NIO,大概能够应付应届生的面试了,2020年四月初面试华为实习生时,面试官有问到这个问题,我把这些讲出来他就没有继续问下去了。当然,结果是我没有完全做出给的代码题,但是他后来问的问题我全部答出,顺利通过技术面。