当用到二进制传输的时候,一定会用bytebuffer这个类,它是buffer接口的子类。
ByteBuffer byteBuffer = ByteBuffer.allocate(6);
虽然使用allocate方法创建的缓冲区并不是一次性地分配内存空间,但我们可以从用户地角度将一个缓冲区想象成一个长度为capacity的数组。
当缓冲区创建后,和数组一样,缓冲区的大小(capacity值)将无法改变,也无法访问缓冲区外的数据
既然缓冲区和数组类似,那么缓冲区也应该象数组一样可以标识当前的位置。缓冲区的position方法为我们提供了这个功能。position方法有两种重载形式,它们的定义如下:
public final int position()
public final Buffer position(int newPosition)
第一个重载形式用来获取缓冲区的当前位置。在创建缓冲区后,position的初始值是0,也就是缓冲区第一个元素的位置。当从缓冲区读取一个元素后,position的值加1.我们从这一点可以看出,position方法返回的位置就是当前可以读取的元素的位置。position的取值范围从0到capacity – 1.
如果position的值等于capacity,说明缓冲区当前已经没有数据可读了。
在大多数情况下不需要直接控制缓冲区的位置。缓冲区类提供的用于读写数据的方法可以自动地设置缓冲区的当前位置。在缓冲区类中,get和put方法用于读写缓冲区中的数据。 每当put方法向缓冲区写入一个数据后,缓冲区的当前位置都会加1.
如果缓冲区的当前位置已经等于capacity,调用put方法就会抛出一个java.nio.BufferOverflowException异常。在缓冲区未初赋值的区域将被0填充。使用get方法可以得到缓冲区当前位置的数据,并使缓冲区的当前位置加1.和put方法一样,
[/color]在缓冲区当前位置等于capacity时使用get方法也会抛出java.nio.BufferOverflowException异常
可以使用position方法将当前位置移到缓冲区的任何位置。缓冲区除了position和capacity外,还提供了一个标识limit来限制缓冲区可访问的范围。[color=red]在初始状态下,缓冲区的limit和capacity值相同。但limit和capacity的区别是limit可以通过limit方法进行设置,而capacity在创建缓冲区时就已经指定了,并且不能改变。limit还可以表示缓冲区中实际的数据量
while(byteBuffer.hasRemaining()) // 枚举byteBuffer中的数据,常用判断
byteBuffer.flip(); // 将limit设为position即2,然后将position设置为 0
分享到:
相关推荐
微信小程序 Buffer 缓冲区详解 微信小程序 Buffer 缓冲区是微信小程序中的一种数据存储方式,用于处理二进制数据。在 Node.js 中,Buffer 类是核心库之一,用于创建一个专门存放二进制数据的缓存区。在微信小程序中...
为了解决这个问题,系统会在内存中设立一块区域,即Buffer缓冲区,用于暂存待写入磁盘的数据或预先加载将要读取的数据。这样,多个I/O请求可以被合并,减少了磁盘头移动的次数,从而提高了整体效率。同时,Buffer...
Buffer缓冲区允许程序将数据暂存到内存中,而不是直接输出到浏览器或其他终端,直到缓冲区满或者通过特定指令触发,才会一次性将所有数据发送出去。 ### 一、Buffer缓冲区的概念 Buffer,即缓冲区,是一种在内存中...
Node.js中的Buffer类是核心库的一部分,专门用来存储二进制数据。在JavaScript中,没有内置的二进制数据类型,但是通过Buffer类,我们可以在Node.js中创建和操作二进制数据。Buffer类的实例可以看作是整数数组,但...
在计算机科学领域,Buffer(缓冲区)是一种重要的概念,它在数据处理中起着至关重要的作用。Buffer的应用广泛,特别是在网络编程,尤其是Socket编程中,它扮演着数据传输的桥梁角色。本文将深入探讨Buffer的基本原理...
SuperMap作为一款强大的GIS软件,提供了“缓冲区分析”功能,即“Buffer_Query”对象,用于创建围绕特定地理特征的区域,这些区域的大小与特征的距离有关。在本篇文章中,我们将深入探讨SuperMap中的缓冲区分析及其...
java实现生产者消费者进程...有三个buffer缓冲区,有多个put线程不断往第一个buffer缓冲区放入字符,有多个move线程从第一个buffer缓冲区取出字符放入buffer2或buffer3中,有多个get线程从buffer2和buffer3中取出字符。
环形缓冲区(CircleBuffer),又称为循环缓冲区或环形队列,是一种高效的数据结构,常用于在多个线程间共享数据或者处理实时数据流。它的设计思想是利用一个固定大小的数组,通过两个指针(读指针和写指针)来追踪已...
本文将深入探讨如何使用环形缓冲区(Circle Buffer)技术优化STM32的串口接收功能。 串口通信,全称通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),是一种简单但实用的串行通信协议,...
在IT行业中,尤其是在地理信息系统(GIS)开发领域,缓冲区分析是一种常见的操作,它用于创建一个特定距离范围内的区域,以研究空间数据的邻近效应。在这个场景中,我们使用了VC++作为主要的编程语言,结合ArcGIS的...
在C#中,我们需要先创建一个点对象,然后使用IGeometry.Buffer方法生成缓冲区。这通常涉及到坐标系统的转换和单位的统一。 2. **线缓冲区**:线缓冲区是由线对象两侧向外扩展的带状区域。这可能产生复杂的多边形...
在本压缩包中,重点讨论的是GIS中的一个重要概念——缓冲区(Buffer)。缓冲区在GIS分析中扮演着至关重要的角色,它是指在特定地理实体周围创建的一个虚拟区域,用于模拟和研究地理现象的影响范围或接触距离。 首先...
之后,通过调用`buffer`方法并传入缓冲区距离,我们可以得到线周围的缓冲区几何对象。最后,我们将结果输出为WKT。 如果你有经纬度坐标,可以先将它们转换为适合的坐标参考系统(如投影坐标),然后再进行缓冲区...
环形缓冲区(Circular Buffer),又称循环队列,是一种数据结构,通常用于实现高效的缓存机制。它在一个固定大小的数组中进行操作,当缓冲区满时,新的元素会覆盖最旧的元素,而不是像传统缓冲区那样等待空间释放。...
环形缓冲区(Ring Buffer)是一种在计算机编程中常见的数据结构,特别是在实时系统、嵌入式系统以及网络通信等领域有着广泛的应用。它是一种利用有限内存空间实现先进先出(FIFO,First In First Out)原则的数据...
标题“linux_buffer_module.rar_buffer缓冲”指的是Linux内核中的缓冲区模块,而描述提及的《嵌入式Linux中的进程同步无竞争态读写》一文则着重讨论了如何在并发环境下通过缓冲区实现进程间的高效通信,防止数据竞争...
The Tao of Windows Buffer Overflow 缓冲区溢出之道 中文翻译版