zoukankan      html  css  js  c++  java
  • 【从NIO到Netty】3.NIOBuffer简介

    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);  // 在直接内存中进行内存分配

  • 相关阅读:
    [LeetCode] 617. Merge Two Binary Trees
    [LeetCode] 738. Monotone Increasing Digits
    289. Game of Life
    305. Number of Islands II
    288. Unique Word Abbreviation
    271. Encode and Decode Strings
    393. UTF-8 Validation
    317. Shortest Distance from All Buildings
    286. Walls and Gates
    296. Best Meeting Point
  • 原文地址:https://www.cnblogs.com/heben/p/13186944.html
Copyright © 2011-2022 走看看