BIO、伪异步IO、NIO、AIO
帮助理解的几篇博客
简单总结
BIO(同步阻塞IO)
每有一个客户端请求,就要创建一个线程来IO,并且这个线程是阻塞的。
伪异步IO
在BIO的基础上加个线程池,线程依旧是阻塞的。
NIO(非阻塞IO)
每有一个客户端请求,就开一个channel(通道),然后会有一个selector(多路复用器)轮询监控每个channel的任务是否就绪,发现就绪就通知程序处理。
AIO(异步非阻塞IO,jdk1.7以上)
每有一个客户端请求,就开一个异步的channel,并给channel规定回调的业务
基本概念
IO流
就根据字面意思理解,数据传输的水流,每个字节是一滴水,特点是有顺序,有起点和终点
根据处理类型分类
字符流(Reader、Writer)和字节流(InputStream、OutputStream)
区别:
- 字节流以字节(8bit)为单位,字符流以字符为单位
- 字节流能处理所有类型数据(中文字符串乱码),字符流只用来处理字符类型数据
根据流方向分类
输入流(Writer、InputStream)和输出流(Writer、OutputStream)
缓冲流
BufferedInputStream
和 BufferedOutputStream
BufferedReader
和 BufferedWriter
是实现了缓冲功能的输入输出流,不用每个字节都跟磁盘交互,而是和内存交互,快
需要注意的
-
流用完都要
close()
,最好放到finally
里面 -
使用缓冲流的时候用
flush()
将内容从内存写入磁盘 -
使用
FileOutputStream
输出中文可能会乱码,可以使用OutputStreamWriter
Java File
java主要通过File类对文件进行操作
几个构造方法:
// 指定文件绝对路径
public File(String pathname)
// 指定文件URI地址
public File(URI uri)
// 指定父文件绝对路径、子文件绝对路径
public File(String parent, String child)
// 指定父文件、子文件相对路径
public File(File parent, String child)
Apache Commons IO
推荐 Apache 的 Commons IO,具体的用法可以搜一下
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>