1.Java的I/O类库的基本架构
1.1.I/0是机器获取和交换信息的主要渠道
1.2.Java的I/O操作类
1.2.1.基于字节操作的I/O接口,例如InputStream,OutputStream
1.2.2.基于字符操作的I/O接口,例如Reader,Writer
1.2.3.基于文件操作的I/O接口,例如File
1.2.4.基于网络操作的I/O接口,例如Socket(scoket类不在java.io.*下)
1.2.1和1.2.2是数据传输的格式,1.2.3和1.2.4是数据传输的方式
1.3.I/0的核心问题是将什么样的数据写到什么地方
1.4.不管是网络传输还是磁盘,最小的存储单元都是字节,而不是字符,所以I/0操作的都是字节而不是字符
1.5.byte转换成char需要解码,char转换成byte需要编码
2.磁盘I/O的工作方式
2.1.读取和写入磁盘I/O的操作都调用的是操作系统提供的接口,系统调用存在内核地址和用户空间地址相互切换的问题
2.2.访问文件的方式
2.2.1.标准访问文件的方式:从操作系统的内存缓冲区读写数据
2.2.2.直接I/O的方式:直接访问磁盘,而不经过操作系统的内核缓存区
2.2.3.同步访问文件的方式:只有成功读写到磁盘,才返回给应用程序成功的标志
2.2.4.异步访问文件的方式:可以提供程序的效率,但是不会改变访问文件的效率
2.2.5.内存映射的方式:操作系统将内存中的某一块区域与磁盘中的文件关联起来
2.3.数据在磁盘中的唯一最小描述就是文件,也是操作系统和磁盘驱动器交互的最小单元
2.4.java序列化就是将一个对象转化成一串二进制表示的字节数组,目的是为了达到数据持久化
3.网络I/O的工作机制
3.1.将一份数据从一个地方正确地传输到另一个地方所需要的时间我们称之为响应时间
3.2.socket是描述计算机之间完成相互通信的一种抽象功能,大部分情况下用的通信协议为TCP/IP的流套接字
3.3.两台计算机相互通信的步骤
3.3.1.底层IP来寻找网络中的主机
3.3.2.利用TCP/IP协议来建立TCP连接(TCP三次握手协议)
3.3.3.建立Socket连接
4.NIO的工作方式
4.1.BIO为阻塞I/O,一旦阻塞,线程将会失去CPU的使用权
4.2.NIO引入了Channel(绑定Socket),Buffer(存储数据),Selector(任务调度器)
4.3.连接请求用BIO,处理请求用NIO
5.I/O调优
5.1.性能测试
5.1.1.看系统的I/O wait指标是否正常
5.1.2.IOPS(每秒进行读写的操作次数)是否达标
5.2.提升性能
5.2.1.增加缓存,减少磁盘访问次数
5.2.2.优化磁盘的管理系统
5.2.3.设计合理的磁盘存储数据块
5.3.0-1024端口是受保护的
5.4.网络I/O优化
5.4.1.减少网络交互的次数,设置缓存
5.4.2.减少网络传输数据量的大小,将数据压缩后再传输
5.4.3.减少编码
5.5.交互方式
5.5.1.同步与异步是从完成任务的角度考虑
5.5.2.阻塞与非阻塞是从CPU的消耗角度考虑
5.5.3.同步阻塞
5.5.4.同步非阻塞
5.5.5.异步阻塞
5.5.6.异步非阻塞
6.装饰器与适配器模式都有一个别名就是包装模式
6.1.适配器模式的意义是要将一个接口转变成另外一个接口,通过改变接口达到重复使用的目的,例如:InputStreamReader
6.2.装饰器模式是保存原来的接口,但是增强原有对象的功能或者提升性能,例如:FileInputStream
菜鸟交流群: 260052172(大神莫入)