Java成神之路(九)IO类

本文详细介绍了IO流的概念,包括字节流和字符流的不同类型及应用,如InputStream、OutputStream、Reader和Writer等。此外还对比了同步与异步、阻塞与非阻塞的区别,并概述了Linux下的五种IO模型及其特性。

IO类

  1. 字符流、字节流、输入流、输出流
    相对于程序而言
    字节流:输入流、输出流的传输方式,基本单位是字节,字节的数据一般需要设定编码。
    字节输入流:
    InputStream(抽象基类,定义了read(byte[] b), read(byte[] b,int off ,int len),close()等类)、FileInputStream(操作文件的输入流)、BufferedinputStream(FilterInputStream的子类,带有缓冲的输入流,效率高一点,封装流,参数是流)。
    字节输出流:OutputStream(抽象基类,定义了wirte(byte[] b), wirte (byte[] b,int off ,int len),close()等类)、FileputStream(操作文件的输出流)、BufferedOutputStream(FilterOutputStream的子类,带有缓冲的输入流,效率高一点,封装流,参数是流)
    字符流:输入流、输出流的传输方式,基本单位是字符。
    字符输入流:
    Reader(基类、read()读取单个字符,返回一个int,需要转换为char,到达流的末尾时,返回-1,read(char[] cbuf),close())、InputStreamReader(把InputStream中的字节数据流根据编码方式转换为字符数据流,参数是流)、FileReader(把FileInputStream中的字节数据转成根据字符编码方式转成字符数据流,参数是文件对象)、BufferedReader(把字符输入流进行封装,实现了readLine(),读取文本行,以行结束符作为末尾,如果到达末尾,返回null,参数是流)
    推荐使用:BufferedRead in =new BufferedReader(new InputStreamReader(system.in))
    字符输出流:
    Wirter(抽象基类,实现wirter(char[] cbuf)输出一个字符数组,wirter(int c)、wirter(String str)、close()、flush()刷新输出流)、OutputStreamWirte(自动编码,参数是流)、FileWirte(同前一个,参数是对象)、BufferedWirter(缓冲,参数是流)
  2. 同步、异步、阻塞、非阻塞
    同步:调用者,主动等待这个调用的结果,不做其他任务
    异步:调用者,所获取的结果,是被调用者通知的。
    阻塞:程序等待调用结果(消息,返回值)时的状态,未返回时,线程挂起,不执行。
    非阻塞:不停止运行线程。
  3. Linux 中五种IO模型
    阻塞IO模型(BIO):
    应该程序调用一个IO模型,进程一直阻塞,直到读取完成。
    非阻塞IO模型(NIO)
    多次系统调用,并马上返回结果,在数据拷贝的过程中,进程是阻塞。
    IO复用模型(IOM)
    使用Select、epoll;对于一个IO端口,两次调用,两次返回,比阻塞IO没有多大的优势,,但实现了同时对多个IO端口进行监听,阻塞。
    信号驱动模型(SIO)
    安装信号处理函数,进程继续运行并不阻塞,当数据准备好,收到信号,调用IO操作函数处理数据。
    异步IO模型(AIO)
    数据拷贝无需阻塞
    比较:BIO可以快速返回数据,但是性能较低。NIO 第一阶段不阻塞,但是不停的询问。第二阶段阻塞,延迟会增加但可以在等待任务完成的过程中处理其他事情。IOM在select与poll调用后阻塞线程,可以同时阻塞多个事件,有数据可读写时就通知用户进程,epoll不需要注册事件,多用于服务器监听多个套接字。SIO第一阶段不阻塞,第二阶段阻塞。AIO全部不阻塞,由内核负责通知已经完成,读写在内核完成。效率高
  4. Netty基础入门
    异步NIO框架
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值