Java的I/O演进之路

本文介绍了Java I/O从早期的阻塞I/O到NIO的演进过程,以及Linux的五种I/O模型,重点讨论了I/O多路复用技术,如select和epoll。Java NIO在JDK1.4中引入,提供了非阻塞I/O和缓冲区等特性,解决了传统I/O的性能瓶颈。JDK1.7进一步升级了NIO,提升了文件处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、I/O 基础入门

Java1.4之前的早期版本,对I/O的支持并不完善,开发人员在开发java高性能IO程序的时候,会面临一些巨大的挑战和困难,主要问题如下:

  • 没有数据缓存区,IO性能存在问题
  • 没有C或者C++的Channel概念,只有输入、输出流
  • 同步阻塞式I/O通信(BIO),通常会让通讯线程长时间的阻塞服务端的响应
  • 支持的字符集有限,硬件可移植性不好

在Java支持异步通讯之前的很长一段时间里,一直都是C/C++长期占据着高性能服务端程序开发的语言,Java的同步阻塞式I/O一直被人们锁所诟病。

1.1 Linux网络I/O模型简介

Linux的内核将所有外部设备都看作一个文件来操作, 对一个文件的读写操作会调用内核提供的提供命令,返回一个文件file descriptor (fd 文件描述符 ),而对一个socket的读写也会有相应的描述符,称为socketfd(socket 描述符),描述符就是一个数字,它指向内核的一个结构体(文件路径、数据区等一些属性)。

根据UNIX网络编程对I/O模型的分类,分成了5类I/O模型,如下:
  • 阻塞IO模型:
  • 非阻塞I/O模型:
  • I/O复用模型
  • 信号驱动I/O模型
  • 异步I/O模型:

1.2 I/O多路复用技

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值