IO相关知识点
IO主要分为三部分;1.java网络编程2.阻塞IO 3.NIO
java网络编程
1..基础知识
ip地址:ip地址用来识别网络中的一个通讯实体,可以是一台主机,也可以是一台打印机,在ip协议的网络中传输数据,必须使用ip地址来标识,传输数据就像是写信,每个信上都写上了收件人和寄件人,同理每个数据包也标明了发送方和接收方的ip
端口号:一个通讯实体可以有很多通信程序来提供网络服务,每个程序用端口号标识,一个端口号只能对应一个通讯程序
2.tcp/udp协议
3.URL
互联网统一资源定位符
4.InetAddress
java提供的代表ip地址的类
Socket
socket就像桥梁一样,连接两个地方,桥有很多,socket也有很多种,常用的是基于TCP/IP的
socket,是套接字编程,这只是网络编程的一个api套件,实际对应传输层及以上的东西,不是协议,只是个编程接口
1.创建socket实例
如图是想建立两个主机之间的应用通信
2.客户端链接
代码如下:
3.服务端连接
代码如下:
创建了ServerSocket对象,绑定端口,调用accert方法监听请求,然后就一直处于阻塞状态
4.socket总结
1.java的IO接口
1)基于字节操作的IO接口
InputStrem OutputStream
2)基于字符操作的IO接口
Reader Writer
3)基于磁盘操作的IO接口
File...
4)基于网络操作的IO接口
Socket(Socket不在IO包下,但是可以为为IO的一部分)
2.阻塞IO的通信模型
每当有客户端连接的时候,服务端都会启动一个线程去接受请求
缺点:1.当客户端很多时,需要创建大量的线程来处理请求,每个线程都占用栈空间和CPU时间,消耗大量资源;2.阻塞会导致频繁的上下文切换,加重CPU负担
3.总结
阻塞式IO俗称BIO
NIO
1.工作原理
一个专门的线程来处理所有IO操作
2.通信模型
在客户端和服务都都维护了一个selector,各自向里面放事件,读事件和写事件,在放置事件和读取事件的时候需要轮训
3.实例
客户端代码: