美文网首页
【Java】NIO中的Buffer、limit、position

【Java】NIO中的Buffer、limit、position

作者: 大数据Zone | 来源:发表于2022-05-27 17:10 被阅读0次

通过本文可以获得如下知识:
① 图解NIO Buffer中的capacity、position、limit的含义。
② 一个Java demo程序演示三者的变化关系。
③ Buffer常用方法。

我们知道Java NIO 由以下三个核心部分组成:

  • Channel(通道)
  • Buffer(缓冲区)
  • Selector(选择器)

在编写NIO程序时,我们对数据的实际操作都是通过Buffer来进行的,经常会用到java.nio.Buffer中的flip()方法。

本文会通过NIO程序实例来讲解flip方法以及limit、position、capacity三个成员变量。

一、Buffer

我们使用 Buffer 与 Channel 交互,数据从Channel读入Buffer,或从Buffer写入到Channel中。

缓冲区的本质是一个可以写入数据的内存区域,之后可以读取数据。 Buffer 对象包装了此内存区域,并提供了一组方法,可以更轻松地使用内存块。

1.1 Buffer的几个重要成员变量

  • capacity : 指定了可以存储在缓冲区中的最大数据容量,实际上,它指定了底层数组的大小,或者至少是指定了准许我们使用的底层数组的容量。不能为负并且不能更改。

  • limit : 指定还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。缓冲区的limit永远不为负,也永远不大于其capacity。

  • position :指定了下一个将要被写入或者读取的元素索引,它的值由get()/put()方法自动更新,在新创建一个Buffer对象时,position被初始化为0。不能为负,并且不能大于 limit。

以上三个属性值之间有一个相对大小的关系:0 <= position <= limit <= capacity。

下面我们用一个图例来解释一下这三个属性的关系及变化过程。

假设我们创建了一个容量为10的ByteBuffer对象,在初始化时,position会被设置为0,limit和capacity被设置为10。在之后使用ByteBuffer对象过程中,capacity的值不会再发生变化,而其它两个值会随着使用而变化。初始时三个属性的值如下图所示:

相关文章

  • 【Java】NIO中的Buffer、limit、position

    通过本文可以获得如下知识:① 图解NIO Buffer中的capacity、position、limit的含义。②...

  • 关于NIO Buffer基本原理详解

    关于NIO Buffer中4个重要状态属性的含义:position、limit、capacity与markBuff...

  • Netty学习笔记

    NIO Buffer NIO ByteBuffer 写模式时 position指向当前待写的索引处,limit和c...

  • Buffer之position,limit,capacity

    一、前言 熟悉NIO的人想必一定不会陌生buffer中position,limit,capacity这三个属性吧,...

  • Java NIO Study (2)

    Java NIO Buffer的三个重要属性 Buffer中3个重要状态属性的含义:position(位置),li...

  • java NIO---Buffer

    NIO中Buffer简介 java的NIO中buffer至关重要,buffer是读写的中介,主要和NIO的chan...

  • Java NIO Buffer

    Java NIO Buffer Buffer使用场景 Java NIO buffers 用于和Java chann...

  • Java NIO Buffer

    在Java NIO中,Buffer用于与Channel交互。数据从Channel读入Buffer,并从Buffer...

  • NIO之三--Buffer

    Java NIO Buffer Basic Buffer Usage Buffer Capacity, Posit...

  • Java NIO-Buffer

    Buffer和Channel总是成对出现,在Java NIO中Buffer用于和NIO通道进行交互,数据总是从Ch...

网友评论

      本文标题:【Java】NIO中的Buffer、limit、position

      本文链接:https://www.haomeiwen.com/subject/jhfvprtx.html