2024年Java最新NIO之缓冲区【基础内容】(1),阿里面试官跟我死磕MySQL

最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

image

除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

在这里插入图片描述

2.缓冲区操作


概念上,缓冲区是包在一个对象内的基本数据元素数组。Buffer 类相比一个简单数组的优点是它将关于数据的数据内容和信息包含在一个单一的对象中。Buffer 类以及它专有的子类定义了一个用于处理数据缓冲区的 API

2.1 创建缓冲区

新的缓冲区是由分配或包装操作创建的.

| 方式 | 说明 |

| — | :-- |

| 分配 | 创建一个缓冲区对象并分配一个私有的空间来存储容量大小的数据元素 |

| 包装 | 创建一个缓冲区对象但不分配任何空间来存储数据元素,

使用我们单独提供的数据作为存储空间来存储缓冲区的数据元素 |

分配方式:

// 创建一个ByteBuffer,容量为10

ByteBuffer byteBuffer = ByteBuffer.allocate(10);

在这里插入图片描述

包装方式:

byte[] array = new byte[10];

ByteBuffer.wrap(array);

在这里插入图片描述

2.2 属性

所有的缓冲区都具有四个属性来提供关于其所包含的数据元素的信息。

在这里插入图片描述

| 属性 | 说明 |

| — | :-- |

| 容量(Capacity) | 缓冲区能够容纳的数据元素的最大数量,缓冲区创建时被设定,永远不能被改变 |

| 上界(Limit) | 缓冲区第一个不能被读或写的元素,或者说缓冲区中现存元素的计数 |

| 位置(Position) | 下一个要被读或写的元素的索引,位置会自动由相应的get()和put()方法更新 |

| 标记(Mark) | 一个备忘位置,调用mark()方法来设定,mark=position,调用reset方法设定position=mark。标记在设定前是未定义的(undefined) |

四个属性之前总是遵循以下关系:

mark <= position <= limit <= capacity

举例:

// 创建一个ByteBuffer,容量为10

ByteBuffer byteBuffer = ByteBuffer.allocate(10);

在这里插入图片描述

位置被设为0,而且容量和上界被设为10,刚好经过缓冲区能够容纳的最后一个字节。标记最初未定义。容量是固定的,但另外的三个属性可以在使用缓冲区时改变

2.3 缓冲区API介绍

接下来我们先看下Buffer中提供的方法

package java.nio;

public abstract class Buffer {

public final int capacity( )

public final int position( )

public final Buffer position (int newPosition)

public final int limit( )

public final Buffer limit (int newLimit)

public final Buffer mark( )

public final Buffer reset( )

public final Buffer clear( )

public final Buffer flip( )

public final Buffer rewind( )

public final int remaining( )

public final boolean hasRemaining( )

public abstract boolean isReadOnly( );

}

put方法

'存取’也就将数据保存到缓冲区中及从缓冲区中取出数据,在Buffer类中并没有提供get和put方法,这两个方法在具体的Buffer子类中有提供,比如ByteBuffer.如下

public abstract class ByteBuffer

extends Buffer implements Comparable

{

// This is a partial API listing

public abstract byte get( );

public abstract byte get (int index);

public abstract ByteBuffer put (byte b);

public abstract ByteBuffer put (int index, byte b);

}

保存数据到缓冲区

public static void main(String[] args) {

// 创建一个ByteBuffer,容量为10

ByteBuffer byteBuffer = ByteBuffer.allocate(10);

// 看一下初始时4个核心变量的值

System.out.println(“初始时–>limit—>” + byteBuffer.limit());

System.out.println(“初始时–>position—>” + byteBuffer.position());

System.out.println(“初始时–>capacity—>” + byteBuffer.capacity());

System.out.println(“初始时–>mark—>” + byteBuffer.mark());

System.out.println(“--------------------------------------”);

// 添加一些数据到缓冲区中

String s = “bobo”;

byteBuffer.put(s.getBytes());

// 看一下初始时4个核心变量的值

System.out.println(“put完之后–>limit—>” + byteBuffer.limit());

System.out.println(“put完之后–>position—>” + byteBuffer.position());

System.out.println(“put完之后–>capacity—>” + byteBuffer.capacity());

System.out.println(“put完之后–>mark—>” + byteBuffer.mark());

}

输出:

初始时–>limit—>10

初始时–>position—>0

初始时–>capacity—>10

初始时–>mark—>java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]


put完之后–>limit—>10

put完之后–>position—>4

put完之后–>capacity—>10

put完之后–>mark—>java.nio.HeapByteBuffer[pos=4 lim=10 cap=10]

在这里插入图片描述

flip方法

现在我想要从缓存区拿数据,怎么拿呢?NIO给了我们一个flip()方法。这个方法可以改动position和limit的位置!

在这里插入图片描述

byteBuffer.flip();

Java高频面试专题合集解析:

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

更多Java架构进阶资料展示

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

tFrFfam-1714925167465)]

更多Java架构进阶资料展示

[外链图片转存中…(img-JpZ6g8kP-1714925167465)]

[外链图片转存中…(img-0z87spKv-1714925167465)]

[外链图片转存中…(img-xLoVMl1Y-1714925167466)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值