Java 中的 IO 流

15 篇文章 0 订阅

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():写入文件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值