IO类
- 字符流、字节流、输入流、输出流
相对于程序而言
字节流:输入流、输出流的传输方式,基本单位是字节,字节的数据一般需要设定编码。
字节输入流:
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(缓冲,参数是流) - 同步、异步、阻塞、非阻塞
同步:调用者,主动等待这个调用的结果,不做其他任务
异步:调用者,所获取的结果,是被调用者通知的。
阻塞:程序等待调用结果(消息,返回值)时的状态,未返回时,线程挂起,不执行。
非阻塞:不停止运行线程。 - 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全部不阻塞,由内核负责通知已经完成,读写在内核完成。效率高 - Netty基础入门
异步NIO框架
本文详细介绍了IO流的概念,包括字节流和字符流的不同类型及应用,如InputStream、OutputStream、Reader和Writer等。此外还对比了同步与异步、阻塞与非阻塞的区别,并概述了Linux下的五种IO模型及其特性。
IO类&spm=1001.2101.3001.5002&articleId=88833092&d=1&t=3&u=64695ec0bb0146c998d4ead586495479)
1521

被折叠的 条评论
为什么被折叠?



