【从BIO到Netty】3.Buffer简介

Buffer为一个抽象类,有许多子类

个人感觉ByteBuffer用得最多,下面继续以该类为例进行介绍

我觉得废话是有用的,可以建立感性认识。因此介绍一下,java.nio.ByteBuffer的作者为Mark Reinhold,这个类从JDK 1.4开始就有了。

ByteBuffer的继承关系如下

它的基本使用如下

import java.nio.ByteBuffer;

public class NioBuffer {
    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocate(4096);
        buffer.put("hello world".getBytes());
        System.out.println(new String(buffer.array()));
    }
}

ByteBuffer.allocate(4096);

 如果去看源代码,可知实际是在堆中分配一个大小为4096的byte数组

ByteBuffer还维护了一系列属性,用来表征buffer的状态

• mark:-1表示undefined,但是更具体地含义和用车并不明白

• pos:用于读取的游标

• lim:表征读取的最大位置

• cap :byte数组的容量

以上面为例,ByteBuffer.allocate(4096)完成后,mark为-1,pos为0,lim为4096,cap为4096

这些属性在读写过程中的用处和更精确的含义,将在后面进行介绍

除此之外,还有其它几种分配内存的方式,比如

ByteBuffer.allocateDirect(4096);  // 在直接内存中进行内存分配

猜你喜欢

转载自www.cnblogs.com/heben/p/13186944.html