`
wydyyhwzx
  • 浏览: 9447 次
社区版块
存档分类
最新评论

nio buffer

    博客分类:
  • nio
阅读更多

       Buffer是一个用于特定基本类型数据的容器, 是特定基本类型元素的线性有限序列,对于每个非 boolean 基本类型,此类都有一个子类与之对应。Buffer非线程安全。类图如下:



 

一、属性

  1. mark,用于标记一个位置,配合reset()使用,初始值-1,调用mark()后将值设置为当前position的值。
  2. position,下一个读或者写的位置。
  3. limit,第一个不能读取或写入元素的位置。
  4. capacity ,缓冲区的容量  

四者之间的关系:mark <= position <= limit <= capacity。



 

 

二、构造Buffer

       Buffer有两种构造模式,分只读Buffer和可读写Buffer,只读Buffer从可读写Buffer上调用asReadOnlyBuffer方法得到。其一是非直接模式,在虚拟机堆上构建Buffer,具体实现类为HeapXXXBuffer、HeapXXXBufferR(只读Buffer),其内有一个基本类型的数组,以及一个偏移量offset,代表Buffer使用数组从offset位置开始,到数组结束位置的数据空间。

  1. 调用allocate创建,在堆上创建一个基本类型的数组来维护数据。
  2. 调用wrap创建,包装一个已有的基本类型数组来维护数据。

其二是直接模式,直接的操作系统内存中分配缓存,调用allocateDirect方法创建。建议将直接缓冲区主要分配给那些易受本机 I/O 操作影响的大型、持久的缓冲区。一般情况下,最好仅在直接缓冲区能在程序性能方面带来明显好处时分配它们。 

 

三、API

  1. capacity,返回缓冲区容量。
  2. clear,清空缓存区,设置position = 0  limit = capacity  mark = -1;
  3. flip,反转缓存区,切换到读模式,设置limit = position  position = 0 mark = -1
  4. limit,返回缓冲区limit值。
  5. limit(int newLimit),设置limit值。
  6. mark,设置标志位,mark = position
  7. position,返回position的值。
  8. position(int newPosition),设置position的值。
  9. remaining,返回缓冲区剩余可用空间大小,返回值为limit - position。
  10. hasRemaining,返回是否还有可用空间,return position < limit。
  11. reset,将position重置到标志位mark,设置position = mark。
  12. rewind,重绕此缓冲区,设置 position = 0 mark = -1,调用此方法是在limit被设置为恰当值的前提下,通常用于重新读取已经被flip的buffer

四、数据操作

  1. 读取数据:通过get(),get(index)。get()从position位置读取,position值加一;get(index)从index位置读取,不改变position。

  2. 写入数据: 通过put(byte),put(index,byte)。put(byte)写入position位置,position值加一;put(index,byte)写入index位置,不改变position。

  3. 批量读取数据:get(XXX[] dst),get(XXX[] dst, int offset, int length)。

  4. 批量写入数据:put(XXXBuffer src),put(XXX[] src, int offset, int length),put(byte[] src)

 

 

 

 

  • 大小: 5.7 KB
  • 大小: 30.9 KB
分享到:
评论

相关推荐

    Java NIO Buffer过程详解

    Java NIO Buffer 过程详解 Java NIO Buffer 是 Java NIO 中的一种重要组件,负责数据的存储和传输。缓冲区是数组,用于存储不同数据类型的数据。在与 NIO 通道交互时,Java NIO Buffer plays a crucial role. 基本...

    动态演示nio中的buffer相关操作.zip

    这个压缩包“动态演示nio中的buffer相关操作.zip”显然是为了帮助用户直观地理解NIO Buffer的工作机制,通过动态演示来展示Buffer如何存储、读取和传输数据。 在Java NIO中,Buffer是一个特定类型的数组,用于临时...

    尚硅谷Java视频_NIO 视频教程

    尚硅谷_NIO_缓冲区(Buffer)的数据存取 ·03. 尚硅谷_NIO_直接缓冲区与非直接缓冲区 ·04. 尚硅谷_NIO_通道(Channel)的原理与获取 ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件 ·06. 尚硅谷_NIO_分散读取与聚集...

    NIO详细介绍channle,buffer,Selector

    ### NIO:Channel、Buffer与Selector详解 #### 一、NIO概述 NIO(Non-blocking I/O,非阻塞I/O)是Java为了解决传统阻塞式I/O效率低下的问题而引入的一种新的I/O操作模式。NIO通过引入Channel、Buffer以及Selector...

    JavaNio视频下载_百度云盘资源

    Buffer是Java NIO中最基本的概念之一,用于在Java NIO中存储不同类型的数据。缓冲区实际上是一块可以读写的内存空间,这块内存空间被封装成NIO Buffer对象,它支持数据的读写操作,并且可以通过flip()方法在读模式和...

    详细了解JAVA NIO之Buffer(缓冲区)

    JAVA NIO之Buffer(缓冲区)详解 JAVA NIO之Buffer(缓冲区)是Java NIO中一个重要的概念,它提供了一种高效的数据处理方式。缓冲区是一个可以写入数据然后从中读取数据的内存块,它被包装成NIO Buffer对象,并...

    Java NIO实战开发多人聊天室

    12-Java NIO-Buffer-概述.mp4 13-Java NIO-Buffer-基本使用.mp4 14-Java NIO-Buffer-三个属性和类型.mp4 17-Java NIO-Buffer-缓冲区分片.mp4 18-Java NIO-Buffer-只读缓冲区.mp4 19-Java NIO-Buffer-直接缓冲区.mp4 ...

    Netty面试专题1

    【Netty面试专题1】 ...Netty 提供了高度可定制的 ByteBuf 替代了标准的 Java NIO Buffer,使得内存管理更加灵活高效。同时,Netty 的 Pipeline 模式允许开发者自定义事件处理流程,简化了复杂的网络编程。

    Netty权威指南高清版本

    书中会介绍Channel、Selector、Buffer等NIO核心组件,并展示如何在Netty中使用它们。 接着,书中会深入讲解Netty的EventLoop和EventLoopGroup。EventLoop是Netty中的工作线程,负责处理I/O事件和执行用户定义的任务...

    Netty面试专题及答案.pdf

    - **ByteBuf**:Netty自定义的缓冲区,提供了比Java NIO Buffer更高效和方便的API。 - **EventLoop(事件循环)**:Netty中的Reactor模型实现,单个线程处理多个任务,避免了线程上下文切换的开销。 - **...

    JavaNIO chm帮助文档

    Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) FileChannel Java NIO系列教程(八) ...

    Netty In Action中文版

    此外,书中还会介绍Netty的内存管理策略,如ByteBuf,它是Netty对Java NIO Buffer的增强,提供了更高效的数据传输方式。 通过阅读这本书,你可以了解到Netty如何处理并发连接,以及其强大的异常处理机制。Netty的...

    精通并发与netty视频教程(2018)视频教程

    77_Java NIO Buffer总结回顾与难点拓展 78_Netty数据容器ByteBuf底层数据结构深度剖析 79_Netty的ByteBuf底层实现大揭秘 80_Netty复合缓冲区详解与3种缓冲区适用场景分析 81_Netty引用计数的实现机制与自旋锁的使用...

    精通并发与 netty 视频教程(2018)视频教程

    32_IO体系架构系统回顾与装饰模式的具体应用 33_Java NIO深入详解与体系分析 34_Buffer中各重要状态属性的含义与关系图解 35_Java NIO核心类源码解读与分析 36_文件通道用法详解 37_Buffer深入详解 38_NIO堆外内存与...

    精通并发与netty 无加密视频

    第77讲:Java NIO Buffer总结回顾与难点拓展 第78讲:Netty数据容器ByteBuf底层数据结构深度剖析 第79讲:Netty的ByteBuf底层实现大揭秘 第80讲:Netty复合缓冲区详解与3种缓冲区适用场景分析 第81讲:Netty引用...

    nio demo for nio学习笔记(体系结构以及模块介绍)

    Java NIO库提供了多种实现,如`java.nio.channels`包下的各种Channel和Selector类,以及`java.nio`包下的Buffer类。 在学习NIO时,首先需要理解Channel、Buffer、Selector的基本概念和使用方法,然后通过实例来熟悉...

    深入浅出Netty_netty_

    此外,Netty的ByteBuf是高效的数据缓冲区,提供了比Java NIO Buffer更友好的API。它支持预读和后写,可以在不复制数据的情况下进行读写操作,从而提高了性能。 书中的代码案例会涵盖如何创建服务器、建立连接、处理...

Global site tag (gtag.js) - Google Analytics