00:00
好,各位同学大家好,接下来给大家介绍red卫浴be field的数据类型,那这个呢?先说一下前沿。对于这个卫浴这种数据类型了解即可。两步,第一个我做了一些大厂的调研啊,现在呢,很少有用be field的这种操作方法。这样的数据结构来处理一线实际的问题。第二个。他呢,又刚刚在这太这。我怕大家翻官网的时候呢,又会有疑问。其他九个你都讲了,最后这一个你没有讲,好像缺了一块,所以从理论知识而言的话呢,干脆给大家补全。打个大满贯,十种数据类型都介绍一下,所以说我们呢,第一保证大家的知识完整性,给大家做一个简单的介绍,第二个从我实际的生产调研,确实目前这个东东用的少,那么我们对他的学习掌握的要求了解即可,前九个要求大家熟练,就这一个是了解即可。
01:15
好。那么同学们首先。先说一下这个问句,它是什么?来吧,官网说话,那么在这儿be field你自己看一下。他的案例be field,这是个key,什么set u 32,然后。然后呢,又给你干一个什么qui,乱七八糟的这些什么东东呢,好英文的你不不你看的不爽,咱们来中文版的,以这个命令来说一下be field的卫浴是什么概念,注意。这个叫位图,这个叫卫浴,两回事,下面呢,看一下他说的意思是。
02:00
用这个命令可以将一个字符串看作是一个由二进制位,二进制位,那是不是只能是零,一,零一,零一所组成的数组?并对这个数组中的任意偏移进行访问,这个所谓的访问就代表查看或者是修改,为什么?否则的话,你看。查看是不是get,修改是不是set和increase by,这是第一步,可以得到一个问题是,它是二进制外所组成的数组,并且可以对这个数组中注意任意位进行反问。这是它的第一个作用。也记,比如说可以使用该命令对一个有符号的五位整数的D1234位设置指定的值在OK,也可以对一个31位的无符号整数型的第4567位进行取值get OK,那么本命令可以对指定的整数进行自增或自减,可配置上移和下移,也就是说溢出数据的处理操作。
03:10
好,那么从这段话我们至少得到了它有两个作用,咱们待会说,但是请告诉我屏幕前的你已经上网课的各位同学。有没有这种感觉,我就是拿着中文官方文档,你从头到尾读一遍,每一个中国字你都能读明白,合一块,你们根本不知道他到底干什么的。那么下面咱们呢?通过官网的审查和阅读,它能干什么呢?请看它的用途。作用在于它能够将很多小的整数存储到一个长度较大的位图当中,又或者将一个非常庞大的键分割为多个较小的键来进行存储,从而非常高效的使用内存。使得能够得到更多不同的应用,特别是在实时分时领域。可以对通过指定的方式对计算溢出进行控制的能力,使它可以被应用于域这一领域。好,这是它是什么?能干嘛?懵逼吧,懵逼就对了,下面杨哥给你拨开雨雾跟着来。假如说我们现在啊,在red里面写了个set k一等一,Hello。
04:23
那这个是我们最经典最简单的strong类型,相信大家不会有任何疑问,那下面这个问题,这个hello,根据我们前面所说啊,它是什么?我们这官网说的很清楚。这个hello是由h he l5个英文字母所组成,那么这个每一个英文字母就会对着一个阿斯克玛,每一个阿斯克玛就会对应这个二进制每八位一个值,这个时候请看我们阿斯克玛的对照表,比如说哈。它对照的十进制104,那么它在底层存储的其实就是个01101000,每八位,每八位,每八位就这么来,所以我们在这儿可以获得的意思是。
05:07
这个哈就等价于这么长的一些010101的一些位图数组,那么接下来我们干的活通过。这一段它的用途以及对应着我们官网的说明,二进制位同的数组,并且对数组中任意偏移进行访问,那得到的结论就是他能做的就是未遇修改和意图控制两大作用,那这个有什么用呢?还是没听明白,杨哥回到我们这阿嘛。假设这个我们这儿啊A大家最熟悉的等于97底子就是01100001,那么现在我们大家都听说一种东西,就是每八位就是一个。字节八个比特作为一个单元,那下面啊,如果我要把它从A改为C,那么最经典的是不是K1AA,我要把它改为CK1等于C,简单吧,那还有另外一种方法,更狠的就是我能不能找到这个位数。
06:15
直接给他付个一,马上就改了,比之前那样写两条命令要更快。换句话说,我们大家都清楚。现在。哥们你呢这个呢是叫Java源码对吧,你的开发工具叫idea,那现在呢,你比较深猛,因为你改了这个源码以后,还要编译,还要执行,那么这个时候我们推送给谁去使用啊,我们底子都清楚啊,对于Java这个源码。一边以后底子最终是不是翻译成二进制自解码,那这个时候我们来读取的是不是就是我们GPM啊,相当于我们现在要做的工作,不再去写这些基础的源码,我直接去修改这个字节码,这就是我们所说的什么位遇修改,也就是官网这所跟你讲的,对这个数组中的任意偏移的一个位置进行访问。
07:16
Get set in,包括后面的溢出控制,那么这样的话你就很恐怖了,相当于说这个Java源码啊,你写个hello word跑到这底层是些乱七八糟字节码,你呢,也就把这步给省略了,你直接去动它的字节码,那这个时候回答我,那是不是更狠更快,相当于偏向于机器语言编程,OK,好,那么同学们理论大家呢,可能当时这。懂一半,懵逼一半,接下来咱们代码说话,一瞬间你会搞懂来,它呢,就是将red的一个字符串看成一个由二进制位组成的数组。并能对。变长位、宽和任意没有字节对齐的指定整形位越进行巡指和修改,那比如说高八位和。
08:06
有符号,符号的16位等等,那么下面它的基本语法是这样的。Get。Set increase by和overflow溢出。那请看,当需要一个整形时,有符号整形需在位数前加个I。I就代表有符号无符号的,在位数前加个U,比如说U8就是八位的无符号整数,I16就是16位的有符号整数。那最终我们来操作里面的这些位浴,就通过这个命令做火车头,你可以是get set by和overflow,那么这四个小的命令拼起来就完成我们的两大功能,未浴修改和意图控制。OK,好,那么同学们接下来呢,咱们来看一下我们的。
09:02
基本命令给大家介绍过,说一下我们的案例。首先。阿卡二这样的一张表我们大家都清楚,不过多介绍了,那么基本基本命令、代码、实操,从理论到实践。第一组be field,这个key随便你叫啊,你叫field key或者K1K2都行,我们先来get,是不是先获取,那么大家请看get什么?这个type,然后是offset,这个type就是有符号或无符号的这么一个整形数字,Offset就是你的起始偏移量,那么大家请看我们的案例介绍。现在我们呢,Set key hello,那么set。Field key这个K你叫K1K2K三都好说,我只老师为了好讲课,我们是叫bit field的,对吧,我们呢就讲哈,没问题吧,那么大家请看field key等于什么?Hello,注意我这个s get现在是100%,这个是不是个死猪类型,那么接下来我们要看看啊。
10:06
我这儿存的是个字符串哈,那么这个它底层是一些干些什么呢。来吧。第一组B的负诱导。那么大家请看,我们就。哎呀,我的妈呀。这个命令也挺长的啊,好,那么贝塔。这个key就是刚才我们的field。K,然后呢,我们呢,Get有符号的八位。干一个零,就是从第零位开始,我们取八位,从第零位开始,大家请看104,那么按照我们这张表的对应,我现在存的是哈,那么大家请看十进制的104底子是不是就是这么一个,只不过它显示给我的是不是就是一个104,好,那么这个是说明什么?前八位存的是这个值是104,所以我们存了H,那以此类推,我们再来啊。
11:12
这也是取8Y从第零,那么接下来。零到七,那么现在是八多少幺零?101,十进制的101等于二进制的,它对标的我们字符是不是e hello嘛,HEL,那么下面以此类推,再来16是不是108,我就不再反复切换,那么大家可以看得出,Hello he I lo,那么是不是就是对标着我们的实际这些值底层就是这样,所以我们这可以得到有符号的八位,从这个开始,你看type就告诉你有符号的八位啊,那么这些是他的这个从高位到低位这些补码砝码的基本知识,大家在宋文康老师加位SE基础上已经说过,我就不再赘述,那么offset它的偏移起始位置了,那么这我们就可以再理解官网上这句话。
12:07
你这存的哈,对他底子而言,就是存了这么一大串。二进制啊,那么我们现在对某一个值的修改是不是非常急速,实时的可以修改这些最终的字符,OK,好,那么所以说由二进制位组成的速度,并对这个速中的任意偏移进行访问,那么现在我们用be field对于这个K,这个K的值就是hello,它的每八位,每八位,每八位分别你看我把每一个都出来,你们104101111,最后就是O,好了,这是第一组。Get,那第二组呢,我说人话,前面我们全部都看了以后,接下来啊,我这么干,有符号的八位,这个八。之前这个值是多少?是101,现在我把它看成120,那么对标着我们的十进制的120是多少?是不是字符X啊,那么相当于说我这儿。
13:04
有符号的八位,从第八位以后,我把这个值改成120,那么这个时候它返回给我101,所以我再get f的,我们得到的值多少,是不是就hello,那个E就会被我改成了X啊。哎,也就是我这样用field的修改更狠,相当于就像我们刚刚所理解的,改了它这个字节码,好,那么同学们,我们简单的呢,来看一下,那现在be filled,那么下面。F的key来,我们get i88,现在先得到多少是不是101,那么101,这是he and是英文字母E,那现在再过来,我这呢,不再是get,我这变成了sat,还是有符号的八位,从这八开始设成多少120,那这个时候同学们给我弹出来的是101,那么我在get key field key的时候,大家请看是不是不再插楼变成HXLO了,哎,所以说这就是对于位于某一个0101值相关的一个修改。
14:14
好,这是我们的第二个,第三个一亏半,那么不停的加,那么弟兄们都晓得啊,二进制啊,它是有其极限的,最高是不是到正速的127,相当于是零,其他气位全水压压压,那么如果你发疯一样的不停的往里面就像注水一样的压压压压压压,它不停的加位,加位加位是不是会溢出啊,那么这样溢出了,对于这种精准度的控制啊,它给我们有三种,哎,杨哥你这儿还没讲这个呢,别着急。咱们呢?先看一下这三种啊,什么回绕啊。Set呀和fair,那么increase不停的加的时候,它也会溢出啊,那么既然是溢出了,它自然而然会有种东西叫溢出控制,那么必然默认的这三个里面,它必然会粘一种,好,那么同学们请看这儿啊,我们这儿接下来呢,他干的意思呢是这样的,从第三个位开始,那么假设这个是叫无符号的四位啊,然后呢,我们呢,对接下来的四位无号数不停的加一。
15:20
OK,好,那么大家请看啊,这个值亏BY,然后呢type,然后呢,偏移量从第二位开始啊,四位里面我从第二位开始,我们不停的加一加一加一加一,那么好,11 12 13 14 15,到最后,哎哟,不好意思,你应该越加越加,越加越大,这个合适吧,但是加着加着不好意思啊,超过了,突然归零了,为什么?因为默认的overflow就是rap,即一循环溢出,因为我们大家都清楚,二进制的话,它默认的是不是从负的128到正的127最高啊,你这要不停的给它1111干翻了,那么最后他就要一个东西叫循环溢出,OK,那么这个呢,就是我们的阴亏败,那么它倒是不重要,重要的是接下来的。
16:13
我们要看的三大循环一出好,那么同学们,我们这儿啊,还是给大家敲一下吧,照着那么sat。Field key,那么大家请看,Hello,没问题吧,我们刚才我们晓得它是每八位,每八位,那么现在我们设一个be field,然后呢是field的key,然后呢是in increase by,然后呢无符号的四位,我们从第二位开始,每次加个一加一加一加加加。大家请看是不是干成零了,那么所以说默认,为什么?因为你正常的做加法是不是应该就像自增一样,数字越来越大,哎,怎么一下子归零了呢?那么就是我们基础篇的那些补码砝码的那些东东,二进制的它的溢出了,循环溢出,好,那接下来我们来情况一下,切记默认in increase败,它使用的就是我们下面这个回绕,OK,又绕回去了。好了,下面这个溢出控制,我们呢,要给大家说一下,那么回到这儿,位于修改,就是set get inqui,那么溢出控制是什么呢?它又分成三个细节,分别是rap。
17:24
回绕,那么刚才已经演示过啊,这个命令的默认溢出控制这种回绕,它呢处理由符号或者无符号的溢出情况,第二个sat是饱和计算,它呢是下移计算的结果为最小的整数值,而上一计算结果为最大值,File挂了直接是什么?并向用户返回空值啊,对不起。我干不了,撤了,不玩了,那么好,同学们请看。第一个啊,我们一点来,现在呢我呢设置了一个来吧,That还是边做边说,诶,那么这个是K,这个是不是value,那么这个A对应着我们的阿玛兄弟们都清楚,十进制英文字母叫小A,十进制叫97,二进制叫01100001,没问题吧,好了,那么下面呢,我要干些什么事呢?
18:21
第一个,那么B的field test get I,八,零,A对应的X的值是不是就是九,那么b field,那么test get。有符号的八位从第零个开始,那么反问,零到七合起来,那么。零到七,给我拿八位,那么这个时候告诉我是不是就是01100001,只不过我们在跟人的交互的时候,统一都返回十进制啊,所以这个值就是97,我相信第二步兄弟们没有任何疑问好了,那么现在大家都清楚啊,I8就表示有符号的八位二进制啊,它的范围是负的128到正的127没问题吧?那么大家请看零到127 OK,你从最小和最大都是正常的,那接下来我干坏事了啊。
19:11
看好。我现在最小和。最大我们大家呢,这。我如果给他递零位。从以后设置是127,这是它的理论极限了,因为ask马最高就是到127,我这从get到set啊,Beat field,那么test这个k set i8127,诶。Set。Be few test set I啊抱歉,哎,手误啊,从第零位开始,这应该是一个set,然后呢是type,然后offet,好,那么同学们请看,当前给我返回的是97,因为之前就是个A嘛,是97没问题,那么现在我在get还是I8,这个零位开始它变成多少127,那么这个时候啊,比方说我们get t,它的值变成这么一个东东了,那么这个值变成这么一个东东,是不是后面这个delete他删除操作键了,OK,好,那么同学们现在啊,看着。
20:23
我们呢,Be field test get I8,这现在值是127。来,我们呢?正常的最高只能设到127,但是我现在偏偏不信这个鞋,我用默认的be field test set有符号八位。从第零位开始,我将其干成了158,只要你超过127就行了,因为他这个二进制最高是不是到127啊,我现在干翻了,干出去了,那么这个时候请看。什么都没写的时候,它的默认来给我弄了127,但是这个时候我be field这个key在get有符号的八位,Ofet从第零位开始,同学们请看负的98干嘛?
21:17
循环溢出了,这是它的默认第一种,什么都不说,就是rap OK,因为它从正的就干成这个负的了,好,这是第一种情况,第二种情况是使用set。饱和计算,那么下一页最小,上一页最大。来,同学们请看。我们在这呢,那么be field test get i8offset下标现在呢,是一出理以后是负的198,那么下面啊,大家请看be field test我这。不断用默认的了,我们的溢出空是用overflow干嘛呢?Set,然后再。
22:02
SI80128,那么出现啊。最高值是不是也只能是127,我偏偏写了个128,那么同学们请看一下啊,弹出来我上一个的时候,这个时候我再bit field,那麻烦你对于这个T,这个K,请你再取一下有符号的八位数,从这零开始多少,因为。下一计算的结果为最小的整数值,而上一计算的结果为最大整数值。我现在。最大是127,我非要搞一个比最大的还要大的,那么善意计算的结果的最大值是不是只能写到127呀?明白,所以说多的我也不管,那接下来兄弟们请看这个。Fair就拒绝执行,意思就是返回一个,那那么这个时候怎么演示呢?同学们请看啊,很简单,现在我是不是127好了,那么这个我overflow,我就不是set,而是fair,那么大家请看,还是刚才那个啊,更大一点,那么。
23:13
是不是更高,对不起,那你上1亿了以后128我都受不了,你干成888更大,那对不起,我拒绝执行,因为你的溢出控制是fair OK,所以这个就是我们对二进制位遇的修改,现在大家体会一下什么叫位浴修改,什么叫溢出控制,OK,好,那么这个就给大家介绍到这儿,因为目前它。用的很少,了解即可,好,那么更多的,那么同学们大家呢,请看一眼。首先说到这儿,我们经过很长时间的学习,终于把这十大数据类型都给同学们讲解清楚,那么LAWYER1234567890,那么现在这些才是你入门ready实操的基本功,请同学们务必动手全部敲一遍,尤其是我敲过的,要求大家熟练掌握。OK,练武不练功,到老一场空,你屏幕前的你。
24:15
也许听懂了,看懂了,不动手敲,没有形成自己的笔记,没有任何意义。不要自己骗自己,OK,接下来同学们那么命令整明白了,后续落地的那么就是我们的高阶篇,结合我们的词人boot为服务,再加red来实现跟我们Java程序的整合,完成更复杂的功能。那么后续的案例再给大家介绍数据类型和落地的应用,好,我们对于我们的十大类型就给大家介绍到这儿。
我来说两句