美文网首页netty
NIO buffer机制和使用

NIO buffer机制和使用

作者: 马路边的小破孩 | 来源:发表于2020-05-03 20:47 被阅读0次

基本介绍

缓冲区(buffer):buffer本质上是一个可以读写的内存块,可以理解成是一个容器,该容器提供了一系列的方法,可以轻松的使用内存块。缓冲区中内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel提供了从文件、网络中读取数据的渠道,但是读写数据都必须经由buffer。 image.png

Buffer类及其子类

Buffer类定义了所有缓冲区都具有的四个属性来提供关于其所包含的数据信息:

    /**
      标记
    */
    private int mark = -1;
    /**
    位置。下一个要被读或者写的元素的索引,每次读写数据都会改变  该值
    */
    private int position = 0;
    /**
   表示缓冲区的当前终点,不能对超过该值的位置进行读写
    */
    private int limit;
    /**
     容量,既可以容纳的最大数据量,在缓冲区创建时设定且不能改变
    */
    private int capacity;

遵循这样的不变关系:mark <= position <= limit <= capacity
相关方法及说明:


image.png

注意事项:

当我们使用get()方法去读取缓冲区的数据时,需要调用flip()方法,表示反转缓冲区,否则会出现BufferUnderflowException异常。看下filp()方法以及get()代码:

//反转缓冲区,如果调用前时put方法,反转之后,
// position置为0,即读游标为0,且可读长度为limit
public final Buffer flip() {
        limit = position;
        position = 0;
        mark = -1;
        return this;
    }

public byte get() {
        return hb[ix(nextGetIndex())];
    }

//每次get()读取之后,position加一
final int nextGetIndex() {                         
        if (position >= limit)
            throw new BufferUnderflowException();
        return position++;
    }

如果是调用get(int index),通过下标读取不会改变position的值,则不会出现BufferUnderflowException异常。

相关文章

  • NIO buffer机制和使用

    基本介绍 缓冲区(buffer):buffer本质上是一个可以读写的内存块,可以理解成是一个容器,该容器提供了一系...

  • Java NIO Buffer

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

  • Buffer

    Java NIO Buffer当我们需要与NIO Channel进行交互时,我们就需要使用到NIO Buffer,...

  • 「高并发通信框架Netty4 源码解读(二)」NIO的前世今生及

    Netty底层使用的是Java NIO,是JDK自带的,NIO三个核心概念包括Buffer、Channel和...

  • Java NIO的一些认识

    NIO NIO 是一种同步非阻塞的I/O模型 NIO的机制 核心包含三个方面 Buffer Channel Sel...

  • Java IO流 -- 03 Java的NIO

    导读目录 Java的NIO概述 使用Buffer(缓冲) 使用Channel(通道) 字符集和Charset 前面...

  • Java NIO-Buffer

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

  • java NIO---Buffer

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

  • nio实现一个简单的reactor模型server

    nio涉及的类和方法 buffer nio的buffer本质上是,一块内存区域。被封装到Buffer类里,并提供一...

  • 4. Java NIO Buffer

    Java NIO Buffer与Channel需要配合来使用。如你所知,数据是从channel被读取至buffer...

网友评论

    本文标题:NIO buffer机制和使用

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