一、什么是I/O、流
I/O就是数据的输入输出
流就是一个数据的序列
二、I/O的基本类库结构
1、基于字节操作的I/O接口:InputStream OutputStream
2、基于字符操作的I/0接口:Writer Reader
3、基于文件操作的I/0接口:File
4、基于网络操作的I/O接口:Socket
三、磁盘I/O工作机制
1、读写文件:内存缓存机制:读取文件时,先查看内存缓存中是否存在该数据,存在则直接加载到用户空间
2、标准访问文件方式
(1)读取时先检查内核缓存空间是否存在,有则返回,无则读取磁盘加载到内核空间
(2)写的时候从用户地址空间复制到内核地址空间缓存中,写操作完成,写到磁盘由系统负责,除非显式调用 sync()
3、直接I/O方式
(1)应用程序直接访问磁盘数据,减少一次内核到用户空间数据的复制
(2)这种加载方式较慢,一般与异步I/O配合使用
4、内存映射方式
(1)内存映射是指将硬盘上的文件位置与进程中的逻辑地址空间中的一块大小相同的区域对应,访问文件转换为访问文件
(2)适用于大量数据量的传输
四、访问磁盘文件
1、JAVA中的File不是一个真实存在的文件对象,返回的是一个FileDescriptor对象,操作时生成StreamDecoder对象来指定编码
五、JAVA序列化技术
1、序列化:将一个对象转化为一串二进制表示的字节数组,通过保存或转移字节数据来达到持久化的目的
2、serialVesionUID:
(1)保证序列化版本的兼容性【在序列化后又修改对象,如果没有指定UID,反序列化出错】
(2)默认serialVersionUID:根据类、属性、方法计算出一个独一无二的变量值
3、适用:
(1)Web中保存Session对象,Tomcat在服务器关闭时会把Session存储为一个Session.ser对象,称为Session的钝化
(2)网络对象的传输
六、网络I/0的工作机制
BIO/NIO/AIO