zoukankan      html  css  js  c++  java
  • Java NIO 编程(二)Buffer 缓冲区

    Buffer 基本介绍

    Buffer 即缓冲区,本质上就是一个可以读写的内存块,可以理解成一个容器对象,该对象提供了一组方法,可以更轻松的使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从文件、网络读取数据的渠道,但是读取或者写入数据都必须经过 Buffer。

    存储过程

    Buffer 类结构

    1、在 NIO 中,Buffer 是一个顶层父类,它是一个抽象类, 类的层级关系图

    img

    常用Buffer子类一览
    
    ByteBuffer,存储字节数据到缓冲区
    ShortBuffer,存储字符串数据到缓冲区
    CharBuffer,存储字符数据到缓冲区
    IntBuffer,存储整数数据到缓冲区
    LongBuffer,存储长整型数据到缓冲区
    DoubleBuffer,存储小数到缓冲区
    FloatBuffer,存储小数到缓冲区
    

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

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

    3、Buffer类相关方法一览

    // 获取最大容量
    public final int capacity();
    // 获取当前的位置
    public final int position();
    // 设置当前的位置
    public Buffer position(int newPosition);
    // 返回极限值
    public final int limit();
    // 设置极限值
    public Buffer limit(int newLimit);
    // 清空缓冲区
    public Buffer clear();
    // 翻转缓冲区
    public Buffer flip();
    // 缓冲区中是否还有剩余元素
    public final boolean hasRemaining();
    // 该缓冲区是否是只读的
    public abstract boolean isReadOnly();
    // 该缓冲区是否有具有可访问的底层实现数组。
    public abstract boolean hasArray();
    // 返回此缓冲区的底层实现数组
    public abstract Object array();
    

    ByteBuffer

    从前面可以看出对于 Java 中的基本数据类型(boolean除外),都有一个 Buffer 类型与之相对应,最常用的自然是ByteBuffer 类(二进制数据),该类的主要方法如下:

    // 创建直接缓冲区
    public static ByteBuffer allocate(int capacity);
    // 创建直接缓冲区
    public static ByteBuffer allocateDirect(int capacity);
    // 获取当前位置的元素
    public abstract byte get();
    // 获取指定位置的元素
    public abstract byte get(int index);
    // 从当前位置添加元素
    public abstract ByteBuffer put(byte b);
    // 在指定位置放置元素
    public abstract ByteBuffer put(int index, byte b);
    

    参考资料

    Netty Java IO 模型

  • 相关阅读:
    kubernetes入门之kube-proxy实现原理
    kubernetes源码阅读及编译
    docker的网络-Container network interface(CNI)与Container network model(CNM)
    kubernetes入门之skydns
    浅析flannel与docker结合的机制和原理
    kubernetes入门之快速部署
    python并发获取snmp信息及性能测试
    Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解
    Facebook开源的基于SQL的操作系统检测和监控框架:osquery Table详解
    视频工具类产品是个什么玩意,产品经理怎么构思一款视频工具类产品
  • 原文地址:https://www.cnblogs.com/dtdx/p/13843818.html
Copyright © 2011-2022 走看看