nio buffer的capacity,position和limit

nio Buffer的capacity,position,limit的3个属性说明:

  1. capacity:Buffer的内存固定的一个大小值,一般创建Buffer时初始化写入-->ByteBuffer.allocate(capacity),需注意写入数据时需考虑数据大小是否超过Buffer的大小,如果超过需对Buffer进行扩容。
  2. positionlimit都分读和写2种情况:
  3. position在读和写情况的分析:
    1)写数据到Buffer中时,position表示写入数据的当前位置。position的初始值为0.当一个byte、long等数据写到Buffer后, position会向下移动到下一个可插入数据的Buffer单元。position最大可为capacity – 1(因为position的初始值为0).
    2)读数据到Buffer中时,position表示读入数据的当前位置,如position=2时表示已开始读入了3个byte,或从第3个byte开始读取。通过ByteBuffer.flip()切换到读模式时position会被重置为0,当Buffer从position读入数据后,position会下移到下一个可读入的数据Buffer单元。
  4. limit在读和写情况的分析:
    1)写数据时,limit表示可对Buffer最多写入多少个数据。
    2)读数据时,limit表示Buffer里有多少可读数据(not null的数据),因此能读到之前写入的所有数据(limit被设置成已写数据的数量,这个值在写模式下就是position)
时间: 2024-08-27 03:36:18

nio buffer的capacity,position和limit的相关文章

Java NIO Buffer

Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.交互图如下: 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. 下面是NIO Buffer相关的话题列表: 1.Buffer的基本用法 使用Buffer读写数据一般遵循以下四个步骤: 写入数据到Buffer 调用flip()方法 从Buffer中读取数据 调用clear()方法或者com

Java NIO(New I/O)的三个属性position、limit、capacity

Java NIO(New I/O)的三个属性position.limit.capacity 在缓冲区中,最重要的属性有下面三个,它们一起合作完成对缓冲区内部状态的变化跟踪: capacity position limit position和limit的含义取决于Buffer处在读模式还是写模式.不管Buffer处在什么模式,capacity的含义总是一样的. 这里有一个关于capacity,position和limit在读写模式中的说明,详细的解释在插图后面. capacity 作为一个内存块,

JAVA基础知识之NIO——Buffer

1 package nio; 2 3 import java.nio.CharBuffer; 4 5 public class BufferTest { 6 public static void main(String[] args) { 7 //创建Buffer 8 CharBuffer buff = CharBuffer.allocate(8); 9 System.out.println("capacity: "+buff.capacity()); 10 System.out.pr

【JAVA】【NIO】4、Java NIO Buffer

Java NIO的Buffer用于和channel进行交互. buffer本质上是一个内存块,你可以写数据,然后读取出来. 这个内存块是通过NIO的Buffer对象进行包装的,该对象提供了一系列的方法,使得对内存块的访问更加容易了. 基本的Buffer使用 使用Buffer读写数据一般有如下4步: 1.将数据写入 Buffer 2.调用buffer.flip()方法 3.从Buffer中读出数据 4.调用buffer.clear()方法或buffer.compact()方法 当你将数据写入buf

Java NIO —— Buffer(缓冲区)

Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. NIO 有以下几种Buffer类型: ByteBuffer MappedByteBuffer CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer capacity

28 Java学习之NIO Buffer(二)(待补充)

一. Buffer介绍 Buffer,故名思意,缓冲区,实际上是一个容器,是一个连续数组.Channel提供从文件.网络读取数据的渠道,但是读取或写入的数据都必须经由Buffer.具体看下面这张图就理解了: 上面的图描述了从一个客户端向服务端发送数据,然后服务端接收数据的过程.客户端发送数据时,必须先将数据存入Buffer中,然后将Buffer中的内容写入通道.服务端这边接收数据必须通过Channel将数据读入到Buffer中,然后再从Buffer中取出数据来处理. Buffer本质上就是一块内

NIO Buffer 内部机理使用姿势

关于NIO Buffer中4个重要状态属性 position.limit.capacity 与 mark Buffer本身是一个容器,称作缓冲区,里面包装了特定的一种原生类型,其子类包括ByteBuffer.CharBuffer.LongBuffer.IntBuffer.DoubleBuffer.ShortBuffer.FloatBuffer. 注意:没有Boolean类型的Buffer Buffer是一种特定原生类型线性的有限的元素序列,Buffer中比较重要的4个属性:position.li

JAVA NIO buffer (知识三)

java nio 里的buffer是缓存数据,通常缓冲区是一个数组,字节数组,也可以是别的类型.最常用的就是bytebuffer, 还有一些其它的类型: charbuffer, shortbuffer, intbuffer, longbuffer, floatbuffer, doublebufer. 一开始在知识(一)里写到,想要用nio读取数据,都是从channel读取到buffer.然后应用从buffer读取数据,同样写数据也是,先把数据写到buffer中,然后读道channel中. 基本上

java NIO buffer --directBuffer (2)

HeapBuffer ----堆缓冲    :其实是在java 的内存模型中,java 虚拟机可以直接管控的 DirectBuffer ---直接缓冲 :使用的是native ,与操作系统挂钩,调用的是c 或者c++ 的代码,不在java 的内存模型中,我们称为堆外内存,因为不属于java 内存模型,所以java 虚拟机管控不到: 但是 address 维护了堆外内存的引用 (在buffer 类中维护者 long address) 那么问题来了,为什么不直接用HeapBuffer 操作,反而 使