java I/O演进之路

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处,并告知本人 https://blog.csdn.net/the_conquer_zzy/article/details/83056299

java1.4之前,java 对I/O支持并不完善,主要问题是:

  • 没有数据缓冲区,I/O性能存在问题
  • 没有c/c++ 中channel概念,只有输入输出流
  • 同步阻塞I/O通信(BIO),通常会导致通信线程被长时间阻塞
  • 支持的字符集有限,硬件可移植性不好

java 1.4修复了以上问题包括:

  • 进行异步I/O操作的缓冲区 ByteBuffer
  • 进行异步I/O操作的Pipe
  • 进行I/O操作(同步或这异步)的channel,包括ServerSocketChannel和SocketChannel
  • 多种字符集的编码能力和解码能力
  • 实现非阻塞I/O的多路复用器selector
  • 基于流行的perl实现的正则表达式类库
  • 文件通道FileChannel

但是仍然存在一些不完善的地方,尤其是对文件系统的处理能力仍显不足,主要问题如下:

  • 没有统一的文件属性(例如读写权限)
  • API能力较弱。例如目录的连级的创建和递归遍历,往往需要自己实现
  • 底层存储系统的一些高级API无法使用
  • 所有的文件操作都是同步阻塞调用,不支持异步文件读写操作
    直到2011年 jdk1.7的发布,带来了NIO2.0,解决了:
  • 提供能够批量获取文件属性的API,这些API具有平台无关性
  • 提供AIO功能,支持文件的异步I/O操作和针对网络套接字的异步操作
  • 完成JSR-51定义的通道功能,包括对配置和多播数据报的支持。

猜你喜欢

转载自blog.csdn.net/the_conquer_zzy/article/details/83056299
今日推荐