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:同步非阻塞、多路复用

  AIO:异步非阻塞,基于事件和回调机制实现

原文地址:https://www.cnblogs.com/wenxiangchen/p/11095917.html