Java面试准备——Java IO流

Java IO流

本文学习自GitHub上的JavaGuide项目,感谢大佬的资源,此处为自我学习与整理,原项目链接 JavaGuide

Java IO流分类

  1. 按照流向:输入流和输出流
  2. 按照操作单元:字节流和字符流
  3. 按照流的角色:节点流和处理流
    主要分为 InputStream,OutputStream,Reader和Writer,各自分别又有节点流和处理流。
    Java面试准备——Java IO流_第1张图片
    Java面试准备——Java IO流_第2张图片
    *图源JavaGuide

既然有了字节流,为什么还要有字符流?

字符流就是Java虚拟机通过字节流转化过来的,这个过程需要开销,所以直接提供一种字符流可以减少开销,并且减少因为未知编码方式而导致的乱码问题。对于图片,音频,视频等采用字节流,而带有文字的信息使用字符流比较好。

BIO,NIO,AIO

  1. BIO:Blocking I/O,同步阻塞IO模式,数据的读写必须阻塞在同一个线程中等待其完成,在活动链接数不是特别高的情况下,这种模型不错。不用考虑系统的过载,限流等问题,模型简单,但是连接数过高时难以支持。
  2. New I/O,一种同步非阻塞的I/O模式,支持面向缓冲,基于通道的I/O操作方法。NIO提供了于BIO中Socket和ServerSocket相对应的SocketChannel和ServerSocketChannel两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞模式。所以低并发使用阻塞,高并发使用非阻塞。
  3. AIO:Asynchronous I/O,AIO也就是NIO2,异步非阻塞。

你可能感兴趣的:(Java面试准备——Java IO流)