• Java 中的 IO 流


    Java 中 IO 流的种类

    按照流的流向划分,可以划分为输入流和输出流;

    按照操作单元划分,可以划分为字节流和字符流;

    按照流的角色划分,可以划分为节点流和处理流。

    其实 Java IO 流共涉及 40 多个类,这 40 多个类看起来杂乱无章,但其实是由一定的规律可循的,而且彼此之间存在非常紧密的联系, Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。

    • InputStream:字节输入流,所有的输入流的基类
    • Reader:字符输入流,所有的输入流的基类
    • OutputStream/Writer::字节输出流,所有的输出流的基类
    • Writer:字符输出流,所有的输出流的基类

    按照操作方式划分结构图如下图所示:

     

    按照操作对象分类结构图如下图所示:

    BIO、NIO、AIO 的区别

    BIO:Block IO,同步阻塞式 IO,就是平常使用的传统的 IO,特点是模式简单,使用方便,但是并发处理能力低。数据的读取和写入必须阻塞在同一个线程内等待其完成。在活动连接数不是特别高(单机小于 1000)的情况下,这种模式是比较不错的,可以让每一个连接专注于自己的 IO,并且编程模式简单,也不用过多考虑系统的负载、限流等问题。线程池本身就是一个天然的漏斗,可以缓冲一些系统处理不了的连接或请求。但是当面对十万甚至百万级连接的时候,传统模式的 BIO 是无法处理的。因此就需要一种更高效的 IO 模型来应对并处理更高的并发量。

    NIO:Non IO,也称 New IO,同步非阻塞 IO,是传统 IO 的升级版,客户端和服务端通过 Channel(渠道)通讯,实现了多路复用。在 java 1.4 中引入了 NIO 框架,对应的 java.nio 包,提供了 Channel、Selector、Buffer 等抽象概念。N 除了有 New 的意思之外,还有 Non-Blocking 的意思在里边。它支持面向缓冲的、基于通道的 IO 操作方法。NIO 提供了与传统 BIO 模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统的 BIO  一样,比较简单,但是性能和可靠性都不好;非阻塞模式则正好相反。对于低负载、低并发的应用程序,可以使用同步阻塞 IO(即 BIO)来提升开发速率和更好的维护性;对于高负载、高并发的网络应用,应该使用 NIO 的非阻塞模式进行开发。

    AIO:Asynchronous IO,异步非阻塞 IO。是 NIO 的升级版,也称 NIO2。在 Java 7 中引入的,异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会阻塞到那里,当后台处理完成之后,操作系统会通知相应的线程进行后续的操作。

    Files 的常用方法

    Files.exists():检查文件路径是否存在

    Files.createFile():创建文件

    Files.createDirectory():创建文件夹

    Files.delete():删除文件或目录

    Files.copy():复制文件

    Files.move():移动文件

    Files.size():查看文件的个数

    Files.read():读取文件

    Files.write():写入文件

  • 相关阅读:
    乾元通多卡聚合设备 消防行业应用解决方案
    Flink学习16:算子介绍map
    七 Jenkins创建任务实现自动化运维部署
    MyBatisPlus(十四)主键策略
    【云原生之Docker实战】使用Docker部署Linux系统监控平台Netdata
    《元宇宙工程》南京首发 落地实用是关键
    ppt怎么压缩到10m以内?分享ppt缩小方法
    数据结构 | 单链表专题【详解】
    Flink--2、Flink部署(Yarn集群搭建下的会话模式部署、单作业模式部署、应用模式部署)
    金仓数据库KingbaseES服务器应用参考手册--8. sys_rewind
  • 原文地址:https://blog.csdn.net/jiaomubai/article/details/125996411