java i o框架_Java基础之I/O框架体系

本文介绍了Java的I/O框架,包括java.io和java.nio包,详细讲解了BIO、NIO和AIO的概念及区别。讨论了字节流和字符流,磁盘I/O,网络I/O,以及NIO中的Buffer、Channel和Selector。最后提到了AIO(NIO 2.0)的异步非阻塞特性。
摘要由CSDN通过智能技术生成

概述

Java中的I/O包主要分布在 java.io 和java.nio两个包中,从传统发展来看,由浅入深即是: BIO -> NIO -> AIO

这三个概念分别表示: 阻塞 I/O, 多路非阻塞 I/O,异步非阻塞 I/O。

io包下是传统的字节流和字符流,nio是jdk1.4之后提出,新增了buffer、channel、selector等概念,

aio又叫做又叫做nio2,比nio更高效,多用于网络编程。

java.io

io主要解决的就是 数据传输的问题,从传输方式上分,可以分为 磁盘 I/O 和 网络 I/O, 从传输格式上分,可以分为 基于字节的 I/O 和 基于字符的 I/O。

基于字节操作的 I/O 接口:InputStream 和 OutputStream

基于字符操作的 I/O 接口:Writer 和 Reader

基于磁盘操作的 I/O 接口:File

基于网络操作的 I/O 接口:Socket

字节 I/O

输入流:

0818b9ca8b590ca3270a3433284dd417.png

输出流:

0818b9ca8b590ca3270a3433284dd417.png

字符I/O

虽然传输的最小的存储单元都是字节,但程序中通常操作的数据都是以字符形式。因此 字符 I/O 还涉及一个 编码转换 的问题。

写字符的 I/O:

0818b9ca8b590ca3270a3433284dd417.png

读字符的 I/O:

0818b9ca8b590ca3270a3433284dd417.png

字符解码StreamDecoder:

0818b9ca8b590ca3270a3433284dd417.png

字符编码StreamEncoder:

0818b9ca8b590ca3270a3433284dd417.png

磁盘I/O

磁盘I/O就是将数据持久化到物理磁盘。Java 中通常的 File 并不代表一个真实存在的文件对象,一个代表这个路径相关联的一个虚拟对象。File可能是一个文件,也可能是一个文件夹。

网络I/O

写网络实际上也是写文件,只不过底层操作系统需要将数据传送到其它地方而不是本地磁盘。Socket没有具体的实体,只是计算机之间完成相互通信一种抽象。Socket有多种,大部分情况下都是基于 TCP/IP 的流套接字。

要建立Socket连接,必须通过TCP/IP协议建立TCP连接。

要建立TCP连接,需要依靠 IP 协议来寻址网络中的主机。

通过 TCP 或 UPD 的地址,也就是端口号来定位 主机上的 某一个程序的 链路。

java.nio

NIO 是相对 BIO说的,

不管是磁盘 I/O 还是网络 I/O,数据在写入 OutputStream 或者从 InputStream 读取时都有可能会阻塞。NIO中几个核心的类有

Buffer

缓冲区 , 包含一些要写入或者读出的数据.

ByteBuffe、CharBuffer、 ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer

Channel

通道 ,对数据的读取和写入要通过Channel,它就像水管一样,是一个双向通道。

SelectableChannel(用于网络读写),FileChannel(用于文件操作)

Selector

多路复用器,提供选择已经就绪的任务。 一个Selector可以同时轮询多个Channel。

Selector 可以同时监听一组通信信道(Channel)上的 I/O 状态

如果没有至少一个信道 I/O 状态有变化,那么 select 方法会阻塞等待或在超时时间后会返回 0

Selector通过 selelct() 取得 SocketChannel

如果有多个信道有数据,那么将会将这些数据分配到对应的数据 Buffer 缓冲区中

AIO

NIO 2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现,是真正的异步非阻塞I/O。

不需要过多的Selector对注册的通道进行轮询即可实现异步读写,从而简化了NIO的编程模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值