IO流机制

IO流分类:
字节流操作——InputStream和OutputStream接口
字符流操作——Writer和Reader
磁盘操作——File
网络操作——Socket
字节流和字符流对比?
大多数情况下使用字节流,字节流是字符流的包装,大多数IO操作直接操作磁盘文件。(真正存储和传输数据时都是以字节为单位的,字符只是存在与内存当中的,所以,字节流适用范围更为宽广)

如果IO在内存中频繁处理字符串,则使用字符流好些,字符流有缓冲区。(缓冲区是一块内存区域,如果一个程序频繁对一个资源进行IO操作,效率会非常低。此时,通过缓冲区,先把需要操作的数据暂时放入内存中,以后直接从内存中读取数据,则可以避免多次的IO操作,提高效率)。
Java序列化?
序列化是处理对象流的一种机制,将对象的内容进行流化,对流化后的对象进行读写操作,可以将流化后的对象传输于网络之间。通过实现Serialize接口来实现序列化。
同步和异步?
同步:一个任务的完成需要依赖另外一个任务,只有被依赖的任务完成这个任务才算完成。要么都成功,要么都失败。(简单来书一个任务的完成是建立在另一个任务完成的基础上)
异步:不需要等待另外一个线程的完成,只需要通知被依赖的任务执行即可,自己完成任务就可以了。
阻塞和非阻塞?
阻塞:针对CPU,CPU停下来等待慢的操作完成了才能执行其它操作。
非阻塞:在这个慢的操作过程中,CPU去执行其它的任务,等这个满操作完成后,再回来进行其后续操作。这样提高了CPU的利用率,但也增加了线程切换次数。
同步和异步、阻塞和非阻塞可以组合成BIO、NIO、AIO?
BIO:同步阻塞IO,服务端和客户端建立通信链路是通过Socket来完成的,两边都有Socket实例,都有InputStream和OutputStream,系统会为他们分配一个缓冲区,服务端和客户端通过缓冲区进行信息传递,写入端将数据写入OutputStream的SendQ队列中,当SendQ满了,数据就发送到另一端的InputStream的RecvQ中,RecvQ也满了就会造成,写入端的OutputStream的Write阻塞,等待RecvQ有足够的空间后,才可以继续接受。
因为一个请求就要创建一个线程,为了节省线程开销,所以创建线程池来创建和回收线程。
NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的来链接请求会注册到多路复用器上,多路复用器轮询到链接有IO请求时才启动一个线程来处理。
AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由OS先完成了再通知服务器去启动线程进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值