博客
关于我
NIO笔记---上
阅读量:792 次
发布时间:2023-02-16

本文共 1467 字,大约阅读时间需要 4 分钟。

Java NIO详解

作为一名前端开发者,我最近由于参与开发一个管理系统而陷入了一个长达20天的代码断更困境。面对即将到来的春招,我利用碎片化时间学习了NIO(非阻塞输入输出),并将学习笔记整理如下,希望能为同样经历过IO与NIO开发过程的开发者提供帮助。


一、NIO简介

NIO(Java NIO)与传统的IO有着相同的功能和目的,但在实现方式上有着显著的不同。NIO支持面向缓冲区的、基于通道的IO操作,这使得它在处理数据输入输出时比传统IO更高效。


二、NIO与传统IO的主要区别

1.传统IO特点

  • 面向流:传统IO是基于流的概念,一个InputStream对应一个OutputStream,数据流动是单向的。
  • 阻塞IO:传统IO是基于阻塞模型,即等待IO操作完成才会继续执行后续操作。

2.NIO特点

  • 面向缓冲区:NIO操作是基于缓冲区的,数据以固定块的形式处理。
  • 非阻塞IO:NIO支持非阻塞IO(Non Blocking IO),允许多个IO操作同时进行。
  • 选择器(Selectors):通过选择器(Selectors)可以同时监控多个通道的状态,提升IO操作的效率。

三、NIO的核心:通道与缓冲区

1.通道(Channel)

  • 作用:连接IO设备(如文件或网络套接字)。
  • 特点:通道本身不存储数据,需要配合缓冲区进行数据传输。

2.缓冲区(Buffer)

  • 作用:用于存取和处理数据,缓冲区是基于内存的数组,支持多种数据类型(如ByteBuffer、CharBuffer等)。
  • 操作
    • allocate():分配缓冲区。
    • put():将数据写入缓冲区。
    • get():从缓冲区读取数据。
    • flip():切换读写模式。
    • rewind():重置缓冲区位置。
    • clear():清空缓冲区。
    • hasRemaining():判断缓冲区是否还有剩余数据。

四、直接缓冲区与非直接缓冲区

  • 非直接缓冲区:通过allocate()方法分配,缓冲区建立在JVM内存中。
  • 直接缓冲区:通过allocateDirect()方法分配,缓冲区直接映射到物理内存,提升数据读写效率。

五、通道的原理与获取

1.通道类型

  • FileChannel:用于文件操作。
  • SocketChannel、ServerSocketChannel:用于网络通信。
  • DatagramChannel:用于UDP数据包通信。

2.获取通道

  • 对于支持通道的类(如FileInputStream、RandomAccessFile等),可以通过getChannel()方法获取通道。
  • 网络IO:通过Socket、ServerSocket、DatagramSocket获取SocketChannel或DatagramChannel。

六、通道之间的数据传输

  • transferFrom()与transferTo():用于数据的传输。
  • 示例
    FileChannel inChannel = FileChannel.open(Paths.get("d:/1.txt"), OpenOption.READ);FileChannel outChannel = FileChannel.open(Paths.get("d:/2.txt"), OpenOption.WRITE);inChannel.transferTo(0, inChannel.size(), outChannel);

通过以上内容的学习,我希望能够帮助更多开发者快速掌握NIO的核心概念。如果有任何疑问或错误,欢迎在评论区指出!

转载地址:http://mdjfk.baihongyu.com/

你可能感兴趣的文章
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NISP国家信息安全水平考试,收藏这一篇就够了
查看>>
NIS服务器的配置过程
查看>>
NIS认证管理域中的用户
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 时事和见解【2023】
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>