Java I/O流
1.流
流是一组有序的数据序列,I/O流提供了一条通道程序,我们使用这个通道可以把源中的字节输送到目的地。
我们经常使用I/O流与磁盘的文件打交道,但是程序的源和目的地可以使内存,键盘,鼠标等等。
输入
输出
硬盘:File
网络:Socket
2.位、字节、字符的区别
位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。
字节(byte):是计算机中数据处理的基本单位,习惯上用大写 B 来表示,1B(byte,字节)= 8bit(位)。
字符:是指计算机中使用的字母、数字、字和符号。
不同编码中,字符和字节的对应关系:
ASCIIS码: 1个英文字母(不分大小写)= 1个字节的空间
1个中文汉字 = 2个字节的空间
1个ASCII码 = 一个字节
UTF-8编码:1个英文字符 = 1个字节
英文标点 = 1个字节
1个中文(含繁体) = 3个字节
中文标点 = 3个字节
Unicode编码:1个英文字符 = 2个字节
英文标点 = 2个字节
1个中文(含繁体) = 2个字节
中文标点 = 2个字节
3.字节流和字符流区别
按照操作的数据单元不同。
字符流在操作的时候会使用到缓存,而字节流是直接操作文件本身。
4.IO模型:BIO、NIO、AIO
4.1.同步和异步,阻塞和非阻塞,并发和并行
同步异步区别: 需不需要等待返回结果。同步实时性比较好,异步的并发性能比较好。
同步:发出请求后,需要等待返回结果,才能进行其他操作。例:打电话
异步:发出请求后,不需要等待返回结果,而是去做其他事情,等返回结果后会通知(轮询、通知、回调)调用者,再进行相应处理。例:发短信
阻塞和非阻塞区别:会不会阻塞当前线程。相对CPU消耗,CPU需不需等待慢操作。
阻塞:当前线程会被挂起或等待,得到结果之后才会被唤醒继续执行。
非阻塞:在调用结果返回之前,不会阻塞当前线程。
并发和并行:并发是一个CUP一段时间内处理多个线程,并行是多个CUP同时处理多个线程。区别:是否同时。
4.2.BIO、NIO、AIO的区别
BIO:同步阻塞
NIO:同步非阻塞、多路复用(select、poll和epoll模式)
AIO:异步非阻塞,基于事件和回调机制实现