IO的分类
- 按照流的流向分,可以分为输⼊流和输出流;
- 按照操作单元划分,可以划分为字节流和字符流;
- 按照流的⻆⾊划分为节点流和处理流。
Java IO类很多,主要是由以下四个抽象基类派生出来的:
- InputStream/Reader: 所有的输⼊流的基类,前者是字节输⼊流,后者是字符输⼊流。
- OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
为什么需要分字节流和字符流?
在数据传输和存储的时候,基本都是以字节为最小存储单元,所以,需要使用到字节流;给人们阅读的文字字符之类的信息,需要将字节转化为字符,转化的工作就是由JVM承担的,开销很大,所以,直接提供一个字符流用于操作字符,这样就可以节省开销。如果是音频和图片等文件,用字节流,如果是文本之类的,用字符流。
IO的使用场景
根据文件类型:
- 如果是音频和图片等文件,用字节流。
- 如果是文本之类的,用字符流。
根据阻塞同步类型:
- 活动连接数不高,小于单机1000,连接的数据量大,就可以采用BIO,这样让每个线程专注于自己的线程,不需要过多考虑系统的过载和限流的问题。
- 十万百万级的连接的时候,可以采用NIO或者AIO。