JAVA NIO学习笔记一

简介: JAVA NIO学习笔记一

NIO学习笔记一

七种缓冲区Buffer

  • ByteBuffer - 最常用的一种
  • CharBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer

缓冲区管理方式

几乎一致,通过allocate() 获取缓冲区

缓冲区存取数据的核心方法

  • put() 存入数据到缓存区中
  • get() 获取缓冲区中的数据

缓冲区的四个核心属性

  • capacity 容量,声明后不可改变
  • limit 界限,表示缓冲区中可以操作数据的大小
  • position 位置,表示缓冲区中正在操作的数据的位置
  • mark 标记,记录当前position的位置,可以通过reset()恢复到mark的位置
  • 0 <= mark <= position <= limit <= capacity

缓冲区读写模式

对于同一个缓冲区,在不同模式下,capacity不变,limit与position将会发生改变。

  • 写模式
    put()
    clear() 清空缓冲区,(缓冲区数据仍然存在,但是出于被“遗忘”状态,就是因为position以及limit变了)
  • 读模式
    flip() 切换到读取数据的模式
    get()
    rewind() 重读,position变为0
    remain() 获取缓冲区中还有多少未读的数据

直接缓冲区与非直接缓冲区

  • 非直接缓冲区
    通过allocate()分配缓冲区,建立在jvm内存中
  • 直接缓冲区
    通过allocateDirect() 分配直接缓冲区,建立在物理内存中,可以提高效率。

传输图解

  • 传统传输

  • 读与写都要经过三次复制。
  • NIO传输

  • 通过物理内存映射文件,减少了中间的copy过程。
  • 弊端:
  • 直接建立在物理内存中,分配、销毁消耗大
  • 应用程序写入物理内存中后,何时写入物理磁盘就不归程序管理。
  • isDirect()方法判断是否直接缓冲区(抽象方法,由具体的实现类返回)
目录
相关文章
|
3月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
19天前
|
消息中间件 缓存 Java
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
零拷贝技术 Zero-Copy 是指计算机执行操作时,可以直接从源(如文件或网络套接字)将数据传输到目标缓冲区, 而不需要 CPU 先将数据从某处内存复制到另一个特定区域,从而减少上下文切换以及 CPU 的拷贝时间。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
|
1月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
31 2
|
2月前
|
存储 网络协议 Java
Java NIO 开发
本文介绍了Java NIO(New IO)及其主要组件,包括Channel、Buffer和Selector,并对比了NIO与传统IO的优势。文章详细讲解了FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel及Pipe.SinkChannel和Pipe.SourceChannel等Channel实现类,并提供了示例代码。通过这些示例,读者可以了解如何使用不同类型的通道进行数据读写操作。
Java NIO 开发
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
1月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
34 0
|
1月前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
38 0
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
58 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
下一篇
无影云桌面