1、概念
IO指的是Input/Output,所以IO解决的就是一个输入输出的问题。
2、文件
文件是OS对硬盘上一块数据的抽象。文件是使用树形结构来组织。
OS在管理硬盘数据时,对硬盘上的数据进行了一层抽象——文件系统。
文件是需要被管理的,OS会去描述它,OS在管理文件时,把文件分成两大类——保存的是数据(文件/文本,图片);组织文件之间的关系(文件夹)。
3、 一个点 . 是表示当前结点
一个点 … 是表示当前结点的父结点
反斜杠\是Windows上用来切割结点名称的分隔符
斜杠/是Linux上用来切割结点名单的分隔符
4、 OS 描述一份文件需要两类信息
i) 元信息(额外信息)
文件名
路径(存在哪个文件夹下)
创建日期
谁创建/有什么权限
Ii)内容数据
5、所有IO设备通用的读取/写入数据的方式
I) 因为有不同的设备,所以出现很多不同的IO;
II) 根据冯诺依曼体系,从设备中读取/写入的原生数据一定是二进制形式(字节流)
IO读取数据速度是很慢的,所以次数尽可能的小。
6、读到的数据read()一次只读一个字节
Buf = new byte[3];
Read(buf);一次读3个字节,放到数组中
7、为什么需要有缓冲流?
当我们用resd()读取文件时,没读一个字节,访问一次硬盘,效率很低。文件过大时,操作起来不方便。因此我们需要用到buffer缓存流,当创建buffer对象时,会创建一个缓冲区数组。当我们读一个文件时,先从硬盘中读到缓冲区,然后直接从缓冲区输出即可,效率会更高。
8、字节流与字符流的区别
- 字节流操作的基本单元是字节,字符流操作的基本单元为Unicode码元。
- 字节流在操作的时候本身不会用到缓冲区,是与文件本身直接操作的;字符流在操作的时候使用到缓冲区。
- 所有文件的存储都是字节(byte)的存储,而磁盘上保留的是字节。
- 在使用字节流操作中,即使没有关闭资源(close方法)也能输出;而字符流不适用close方法的话,不会输出任何内容。
9、什么是序列化和反序列化?
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
什么时候需要序列化?
- 把内存中的对象状态保存到一个文件中或者数据库中的时候;
- 用套接字在网络上传送对象的时候。
10、一个序列如果想被序列化,那么需要实现一个Serializable接口。
类中的静态变量的值是不会被序列化的,transient修饰的属性不会被序列化。
在实现Serializable接口的时候,一定要给serialVersionUID赋值,最好设置为1L,这个L最好大写来区分,不然小写看起来像数字1,不同的serialVersionUID值会影响到反序列化。