• Java连载150NIO详解(一) 心悦君兮君不知


    一、IO原理

    1.底层原理

    • 操作系统在进行IO的时候,实际上并不是即时操作,它们是通过缓冲区的,也就是说,我们读写文件都是通过一个中介来进行的。读系统就是把内核缓存区的内容复制到进程缓冲区;写系统就是把进程缓冲区的内容复制到内核缓存区。
    • 之所以这样做的原因是避免大量的IO操作,大量的IO操作效率是很低的。这个过程并不等价于数据在内核缓冲区和磁盘之间的交换。
    150.1
    150.1

    2.

    • NIO和IO的实现方式有所不同,NIO实在JDK1.4之后引入的,采用的是块的实现方式,而IO采用流的实现方式

    3.提供了两套API实现方式

    • 标准输入输出的NIO
    • 网络编程的NIO

    4.流与块的优缺点

    • 基于流的IO,速度慢,但是为流式数据提供过滤器
    • 基于块的IO,速度快,但是缺乏像流的雅兴和简单性

    5.Buffer读取数据的步骤

    • 将数据读取到buffer之中(buffer会记录写入了多少数据)
    • 调用flip()方法(将buffer从写模式变成读模式)
    • 在buffer中读取数据
    • 调用clear()或者compact()方法(clear() 方法会清空整个缓冲区。compact() 方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。)

    6.关于Channel

    • 对Channel的读写必须通过buffer
    • Channel是可以异步读写的
    • Channel是双向的,既可以读又可以写

    7.NIO中的Channel有如下几种

    • FileChannel,文件中读取数据
    • DatagramChannel,读写UDP网络协议数据
    • SocketChannel,读写TCP网络协议数据
    • SocketServerChannel,可以监听TCP网络协议数据

    二、源码:

  • 相关阅读:
    Spring Boot的每个模块包详解
    spring框架所有包说明
    TCP三次握手和四次挥手
    线程池实现原理
    AVL树与红黑树
    去哪儿网面经
    什么是缓存一致性问题?如何解决?
    Redis的应用场景和优缺点
    线程池
    手写快排
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/15681242.html
Copyright © 2020-2023  润新知