Java基础部分(Java异常与Java IO/NIO)
Posted Panda_Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础部分(Java异常与Java IO/NIO)相关的知识,希望对你有一定的参考价值。
Java基础部分
1.异常
1.1 什么是异常
1.2异常体系结构
1.3 java异常处理机制,如何处理异常
1.4 怎么自定义异常
原文链接:https://blog.csdn.net/strivenoend/article/details/116487275
链接: 参考链接.
链接: java入门学习路径.
2. 接口与抽象类的区别
链接: 接口与抽象类.
3. Java IO (含IO多路复用)
3.1 字节流、字符流
字节流继承于InputStream和OutputStream
字符流继承于InputStreamReader和OutputStreamWriter
文件类 FileInputStream 和 FileOutputStream
3. 2 IO多路复用
3.2.1. select函数
- 可监听的文件描述符的个数说受限的。bitmap 1024位(内核规定的)
- 客户端操作服务器时就会产⽣这三种⽂件描述符(简称fd):writefds(写)、readfds(读)、和 exceptfds(异常)。select会阻塞住监视3类⽂件描述符,等有数据、可读、可写、出异常 或超 时、就会返回;返回后通过遍历fdset整个数组来找到就绪的描述符fd,然后进⾏对应的IO操 作。
- 优点: ⼏乎在所有的平台上⽀持,跨平台⽀持性好
- 缺点: 由于是采⽤轮询⽅式全盘扫描,会随着⽂件描述符FD数量增多⽽性能下降。 每次调⽤ select(),需要把 fd 集合从⽤户态拷⻉到内核态,并进⾏遍历(消息传递都是从 内核到⽤户空间) 默认单个进程打开的FD有限制是1024个,可修改宏定义,但是效率仍然慢。
3.2.2. poll函数
基本原理与select⼀致,只是没有最⼤⽂件描述符限制,因为采⽤的是链表存储fd。
3.2.3. epoll函数
epoll之所以⾼性能是得益于它的三个函数
- epoll_create()系统启动时,在Linux内核⾥⾯申请⼀个B+树结构⽂件系统,返回 epoll对象,也是⼀个fd。
- epoll_ctl() 每新建⼀个连接,都通过该函数操作epoll对 象,在这个对象⾥⾯修改添加 删除对应的链接fd, 绑定⼀个callback函数。
- epoll_wait() 轮训所有的callback集合(就绪的数据),并完成对应的IO操作
优点: 没fd这个限制,所⽀持的FD上限是操作系统的最⼤⽂件句柄数,1G内存⼤概⽀持10万个句柄 效率提⾼,使⽤回调通知⽽不是轮询的⽅式,不会随着FD数⽬的增加效率下降 内核和⽤户空间mmap同⼀块内存实现。
3.2.4 selcet 与 epoll区别
select函数采用的有一个rset参数,采用的bitmap结构 1024位,每次调用需要将bitmap拷贝到内核,就绪的数据拷贝返回给用户态,哪一位置为1, 说明这位对应的socket是就绪的。太麻烦了 如果前700个都为0,也需要去依次查找。
epoll函数
通过epoll_ctl 将需要关注的socket注入到epoll对应的一块空间(epoll 监听的列表中),将就绪列表中的(另外一块空间)就绪数据拷贝给用户态,不需要按位去检查。
优势2: select函数最多1024个socket。
以上是关于Java基础部分(Java异常与Java IO/NIO)的主要内容,如果未能解决你的问题,请参考以下文章