IO流应用及原理分析

什么是I/O流呢?

input、output输入和输出,而‘流’是一种抽象的概念,表示的是数据的五结构化传递。

核心体系

File、InputStream、OutputStream、Reader、Wirter

IO流的分类

字节输入InputStream、输出流OutputStrream:可以处理所有的文件

字符输入Reader、输出流Writer:只可以处理字符文件

IO来源

  1. 磁盘I/O.
    //磁盘IO
    FileInputStream fis=new FileInputStream("D:/text.txt");
    
    
  2. 内存
    //内存
    String str="hello word";
    ByteArrayInputStream bai=new ByteArrayInputStream(str.getBytes());
  3. 键盘

    //键盘
    //Scanner
    InputStream is=System.in;
    

序列化、反序列化 (实现对象跨JVM传输)

ObjectInputStream/ObjectOutputStream

I/O流的底层原理

什么是RPC协议(技术下沉)

RPC(Remote Procedure Call)远程过程调用,是通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。一般用来实现部署在不同机器上的系统方法的调用,通过网络传输使程序能够像访问本地资源一样访问远端系统资源。

五种I/O模型

阻塞

非阻塞——轮询,增加CPU资源压力

复用——

select/poll:单个进程可以同时处理多个客户端的网络IO连接,缺点:会扫描所有的连接,造成系统开销、响应延时,jdk1.6前的NIO使用的是这种模型。

epoll:对单个进程打开的连接数没有限制(根据内存);利用每个fd上的callback函数来实现异步回调,省去了轮询;

异步I/O

信号驱动

BIO:通过多线程优化,一个线程负责一个IO流的操作

NIO:new IO,新特性如下图

NIO中的核心组件

通道(Channel):Java NIO数据来源,可以是网络也可以是本地磁盘

缓冲区(Buffer):数据读写的中转区

选择器(Selectors):异步IO的核心类,实现异步非阻塞IO一个Selectors可以管理多个通道

Channel通道的实现:

FileChannel:从文件中读写数据

DatagramChannel:通过TCP协议读写网络中的数据

ServerSocketChannel:监听一个TCP连接,对于每个新的客户端连接都会创建一个SocketChannel

Buffer的本质

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值