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

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中负责数据的存储。缓冲区就是数组。用于存储不同数据类型的数据。,需要的朋友可以参考下

    尚硅谷Java视频_NIO 视频教程

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

    nio Buffer internals

    NULL 博文链接:https://wutaoo.iteye.com/blog/419232

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

    可以动态演示nio中buffer的相关操作,直观看到各种重要数据的变化,方便大家更好的理解nio的buffer模型

    NIO详细介绍channle,buffer,Selector

    主要介绍一些关于NIO 的基础知识,有浅到深

    Java性能优化之使用NIO提升性能(Buffer和Channel)

    NIO是NewI/O的简称,具有以下特性:为所有的原始类型提供(Buffer)缓存支持;使用java.nio.charset.Charset作为字符集编码解码解决方案;增加通道(channel)对象,作为新的原始I/O抽象;支持锁和内存映射文件的...

    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 ...

    java网络编程NIO视频教程

    01-Java NIO-课程简介.mp4 02-Java NIO-概述.mp4 03-Java NIO-Channel-概述.mp4 04-Java NIO-Channel-FileChannel(介绍和示例).mp4 05-Java NIO-Channel-FileChannel详解(一)....15-Java NIO-Buffer-分配和读写数据.mp4

    JavaNIO chm帮助文档

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

    精通并发与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堆外内存与...

    java nio中文版

    java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...

    精通并发与netty 无加密视频

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

    jna-4.2.2 官方原版下载

    Java array and NIO Buffer arguments (primitive types and pointers) as pointer-to-buffer Nested structures and arrays Wide (wchar_t-based) strings Native long support (32- or 64-bit as appropriate)...

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

    主要介绍了JAVA NIO之Buffer(缓冲区)的相关资料,文中讲解非常细致,帮助大家更好的学习JAVA NIO,感兴趣的朋友可以了解下

    Java IO, NIO and NIO.2(Apress,2015)

    Next, you'll learn about NIO's buffer, channel, selector, regular expression, charset, and formatter APIs. Finally, you'll discover NIO.2's offerings in terms of an improved file system interface, ...

    java文件读写处理

    对文件的读取,写入,文件复制等,包括:customBuffer复制文件,nioBuffer复制文件,nioTransfer复制文件

    java NIO 视频教程

    标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Non-blocking IO(非阻塞IO) Java NIO...

    服务端以NIO的方式处理请求的Demo

    服务端以NIO的方式处理请求的Demo,源码及详细注释

    Java NIO系列教程

    Java NIO系列教程 Java NIO Channel Buffer Selector SocketChannel

Global site tag (gtag.js) - Google Analytics