首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

varint是啥你真的知道么?

下面我们会有两个知识点需要讲解: 字节序 varint编码 字节序 计算机在信息传输过程中都是采用一定编码格式数据编码为二进制,当数据接收方收到数据以后也会进行相应解码二进制数据转换成响应格式...首先int类型数据占据4个字节,以大端序为例我们可以看到123456高位一个字节都是无用,我们可以使用三个字节就能代表123456,由于Kafka长度字段数值都会远远小于123456,甚至...varint是使用一个或多个字节序列化整数方式,他可以把一个固定字节整数编码成变长字节。...每一个字节7位用于以7位为一组存储数字二进制补码表示,最低有效数组在前,这也就表明varint编码是按照小端序来排列。...图中对数字123456进行varint编码,123456用二进制表示为1 11100010 01000000,每次从向取7位再加上最高有效位变成11000000 11000100 00000111。

1.3K30

0x15Java引用赋值,是原子操作吗? 线程安全吗?

Java内存模型要求,变量读取操作和写入操作都必须是原子操作,但对于非volatile类型longdouble变量,JVM允许64位读操作或写操作分解为两个32位操作。...当读取一个非volatile类型long变量时,如果对该变量读操作和写操作在不同线程中执行,那么很可能会读取到某个值32位一个32位。...因此,即使不考虑失效数据问题,在多线程程序中使用共享且可变longdouble等类型变量也是不安全,除非用关键字volatile来声明它们,或者用锁保护起来。...其特点是使用灵活,空间比较大,但容易出错 栈区: 由编译器自动分配释放,保存局部变量,栈上内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率,但空间大小有限 文字常量区:...,长整数,对象四种数据,其内部实现不是简单使用synchronized,而是一个更为高效方式CAS (compare and swap) + volatilenative方法,从而避免了synchronized

3.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

工程监测多通道振弦模拟信号采集仪VTN通讯协议

寄存器值总是以整数形式存在,基本操作单位为“字” (2 字节整数, 大端模式)。通过数字接口可完成对寄存器读取写入(修改)操作。 寄存器写(修改) 操作后可保存于内部存储器,掉电不遗失。...图片数据模式寄存器数据值采用大端模式, 数据字节保存在内存低地址中,而数据字节保存在内存高地址中,数据帧传输时先传输低地址字节后传输字节。...每个寄存器对应两个字节,则单个寄存器值=字节值*256+字节值。若无特殊说明,本手册后续章节所述寄存器(或“参数” )均是指两字节构成 16bit数据。...通讯协议本设备支持标准工业 MODBUS 通讯协议(03、 04、 06 指令码)自定义简单 AABB 协议以及字符串指令集三种协议。...MODBUS AABB 通讯协议支持基于设备地址总线连接一主多从应用结构, 在总线中VTN4XX 始终作为从机使用AABB 通讯协议AABB 通讯协议是一种非标准自定义协议, 相较于 MODBUS

29420

Java 虚拟机:Java基本类型

Java 语言规范中,boolean 类型值只有两种可能,它们分别用符号“true”“false”来表示。显然,这两个符号是不能被虚拟机直接使用。...Java 基本类型大小 在第一篇中我曾经提到,Java 虚拟机每调用一个 Java 方法,便会创建一个栈帧。为了方便理解,这里我只讨论供解释器使用解释栈帧(interpreted frame)。...在 Java 虚拟机规范中,局部变量区等价于一个数组,并且可以用正整数来索引。除了 long、double 值需要用两个数组单元来存储之外,其他基本类型以及引用类型值均占用一个数组单元。...举例来说,当我们把 0xFFFFFFFF(-1)存储到一个声明为 char 类型字段里时,由于该字段仅占两字节,所以两位字节便会被截取掉,最终存入“\uFFFF”。...在加载时 char 值会被复制到 int 类型字节,而高二字节则会用 0 来填充。 对于 byte、short 这两个类型来说,加载伴随着符号扩展。举个例子,short 大小为两个字节

73670

冷饭新炒:理解JDK中UUID底层实现

16比特整数表示 time_hi_and_version 时间戳高位版本号 2 4 高位4比特是版本号表示,剩余是时间戳12比特整数表示 clock_seq_hi_and_res clock_seq_low...前面反复提到JDK中只提供了版本3版本4实现,但是java.util.UUID布局采用了UUID规范中字段定义,长度一共128比特,刚好可以存放在两个long类型整数中,所以看到了UUID类中存在两个...这里总结一下随机数版本UUID实现步骤: 通过SecureRandom依赖提供安全随机数接口获取种子,生成一个16字节随机数(字节数组) 对于生成随机数,清空重新设置versionvariant...实现步骤如下: 通过输入命名字节数组基于MD5算法生成一个16字节长度随机数 对于生成随机数,清空重新设置versionvariant对应位 把重置完versionvariant随机数所有位转移到...,填充到字节缓冲区buf中,如果长度len超过了输入值ASCII格式表示,则会使用0进行填充 * 这个方法就是把输入长整型值val,对应一段长度位,填充到字节数组buf中,len控制写入字符长度

1.1K50

详解 & 0xff 作用

首先我们要都知道, &表示按位与,只有两个位同时为1,才能得到1, 0x代表16进制数,0xff表示数二进制1111 1111 占一个字节.其进行&操作数,最低8位,不会发生变化....只是为了取得八位 通常配合移位操作符>>使用 例如:java socket通信中基于长度成帧方法中,如果发送信息长度小于65535字节,长度信息字节 定义为两个字节长度。...这时候两个字节长度信息,以Big-Endian方式写到内存中 out.write((message.length>>8)&0xff);//取八位写入地址 out.write(message.length...11111111 两个数做与操作,显然0xff补充到16位,就是高位补0 此时0xff 为 0000000011111111 与操作 1&0 =0 1&1 =1 这样 0x1234只能保留八位数...&上0xff 本例子中,byte转为int 24位必将补1,此时补码显然发生变化,在与上0xff,24重新置0, 这样能保证补码一致性,当然由于符号位发生变化,表示十进制数就会变了 1111

81610

java学习笔记(基础篇)—IO流

一:流概念 在Java中,把一组有序数据序列称为流。 ​ 如a.txt文件拷贝到b.txt中。 在Java中流是使用统一方式操作输入输出数据。...流就是一个对象。所在java.io.*,Java I/O系统负责处理程序输入输出,java.io包它对各种常见输入流输出流进行了抽象。...字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率。...OuputStream类提供了一系列写数据有关方法: write(): 向输出流写入数据:有三种重载形式: a)void write(int b):向输出流写入一个字节; b)void write...参数off指定字节数组起始下标,从这个位置开始输出由参数len指定数目的字节; 以上第一个write方法从输出流写入一个字节,而其余两个write方法从输出流批量写出若干字节

81410

java学习笔记(基础篇)—IO流

一:流概念 在Java中,把一组有序数据序列称为流。 如a.txt文件拷贝到b.txt中。 在Java中流是使用统一方式操作输入输出数据。 从文件中读取,从键盘读取,从网络中读取......流就是一个对象。所在java.io.*,Java I/O系统负责处理程序输入输出,java.io包它对各种常见输入流输出流进行了抽象。...字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率。 3)根据流角色 a)节点流,如FileInputStream b)包装流/处理流,如BufferedInputStream。...OuputStream类提供了一系列写数据有关方法: write(): 向输出流写入数据:有三种重载形式: a)void write(int b):向输出流写入一个字节; b)void write...off指定字节数组起始下标,从这个位置开始输出由参数len指定数目的字节; 以上第一个write方法从输出流写入一个字节,而其余两个write方法从输出流批量写出若干字节

93210

振弦采集模块通讯协议

寄存器值总是以整数形式存在, 基本操作单位为“ 字” ( 2 字节整数, 大端模式), 有掉电保存掉电丢失两种类型(对应“ 读/写” “ 只读” 两种属性)。...通过模块数字接口可完成对寄存器读取写入(修改)操作。 寄存器写(修改)寿命典型值为 10 万次, 读取次数没有限制。...数据模式寄存器数据值采用大端模式, 数据字节保存在内存低地址中,而数据字节保存在内存高地址中,数据帧传输时先传输低地址字节后传输字节。...每个寄存器对应两个字节,则单个寄存器值=字节值*256+字节值。...使用握手协议在读写寄存器时,建议使用 VMXXX 模块握手协议(非必须),当检测到模块空闲时发起寄存器操作(硬件握手详见“ 2.3.2 硬件握手” ,软件握手详见“ 3.7.2 软件握手” )。

38830

java之IO

结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。       节点流处理流主要区别:              节点流:可以从或向一个特定数据源(节点)读写数据。...InputStream基本方法 //读取一个字节,返回一个整数(0~255)。 //结束:返回-1,表示已到输入流结尾。...数组中(设 k 为实际读取字节数,这些字节存储在 b[off] 到 b[off+k-1]);以整数形式返回实际读取字节数。...OutputStream基本方法 //向输出流中写入一个字节数据,该字节数据为参数b8位 public abstract void write(int b) throws...,并将其转成int值 writeInt(int);//一次写入四个字节,注意write(int)不同,write(int)只将该整数最低一个8位写入,剩余三个8为丢失 short

50530

java.io包中定义了多个流类型(类或抽象类)来实现驶入/输出功能;可以从不同角度对其进行分类: 按处理数据单位不同可以分为输入流字符流 按照功能不同可以分为节点流处理流  JDK所提供所有流类型位于包...InputStream基本方法 //读取一个字节并以整数形式返回(0~255) //如果返回-1已到输入流末尾 int read() throws IOException //读取一系列字节并存储到一个数组...OutputStream基本方法 //向输入流中写入一个字节数据,该字节数据为参数b8位 void write(int b) throws IOException //一个字节类型数组中数据写入输出流...void write(byte[] b) throws IOException //一个字节类型数组,从指定位置(buff)开始len个字节写入到数据流 void write(byte[] b...Write基本方法 //向输入流写入一个字符数据,该字节数据为参数b16位 void write(int c) throws IOException //一个字符类型数组中数据写入输出流 void

39820

redis 知识总结

,批量设置键值incr key,自增,如果无法解析为整数报错。incrby key increment,加上整数。decr key,自减,如果无法解析为整数报错。...集合写入sadd key member [member ...],一个或多个成员元素加入到集合中,已经存在忽略。读取smembers key,获取集合所有成员。...并发基础:IO多路复用,linuxepoll。命令执行采用单线程模型串行化,避免上下文切换和加锁。4.0版本之前网络IO命令执行都是在一个线程中完成。...4.0版本开始支持网络IO多线程,命令执行单线程。字符串存储int,字符串长度小于等于12字节且可以表示为整数时,采用int类型。embstr,字符串长度小于40字节时,数据内嵌存储。...应用场景缓存缓存更新策略内存淘汰,内存不足时淘汰数据。超时剔除,ttl 时间到期删除。主动更新,应用中数据库写入同时更新缓存。根据场景选择更新策略:一致性或固定数据,使用内存淘汰。

16410

redis6.0 源码学习(五)ziplist

它存储字符串整数值,其中整数被编码为实际整数,而不是一系列个字符。 它允许对列表两侧进行pushpop操作且复杂度为O(1)。...用于标记压缩列表末端。 ziplist中每个entry均包含两个信息:prevlen encoding。prevlen 字段:存储前一个条目的长度,以便能够从后到前遍历列表。...具体如下: a:字符串 当字符串小于63字节时(2^6),节点存为上图第一种类型,2位为00,6位表示data长度。...b:整数整数节点encoding长度为8位,其中高2位用来区分整数节点字符串节点(2位为11时是整数节点),6位用来区分整数节点类型,具体如下: 二、代码解析 主要有以下接口,这里只分析几个...1还是5 /* 获取'ptr'中 entry encoding type data length (字符串长度或者整数使用bytes ) 。

46920

JavaString类中提到代码点,代码单元到底是什么?

计算机采用八比特一个字节一个字节最大整数是255,还要表示中文一个字也是不够,至少需要两个字节,为了统一所有的文字编码,unicode为每种语言中每个字符设定了统一并且唯一二进制编码,通常用两个字节表示一个字符...由于英文符号只需要用到8位,所以其8位永远是0,因此保存英文文本时会多浪费一倍空间。...UTF-8就是以字节为单位对unicode进行编码,对不同范围字符使用不同长度编码。...字节形式通常称作 UCS-2,在Java中,char类型用UTF-16编码描述一个代码单元,但unicode大于0x10000部分如何用char表示呢,比如一些emoji:javachar类型占两个字节...codePointAtImpl方法判断当前char是代理项代码单元,下一个代理项代码单元,则这两个char是一个codepoint。

45720

开心档之Java 流(Stream)、文件(File)IO

Java 为 I/O 提供了强大而灵活支持,使其更广泛地应用到文件传输网络编程中。但本节讲述最基本流与 I/O 相关功能。我们通过一个个例子来学习这些功能。...PrintStream 定义 write() 最简单格式如下所示:void write(int byteval)该方法 byteval 八位字节写到流中。...3public int read(int r)throws IOException{} 这个方法从 InputStream 对象读取指定字节数据。返回为整数值。...5public int available() throws IOException{} 返回下一次对此输入流调用方法可以不受阻塞地从此输入流读取字节数。返回一个整数值。.../O还有一些关于文件I/O类,我们也需要知道:File Class(类)FileReader Class(类)FileWriter Class(类)----Java目录创建目录:File类中有两个方法可以用来创建文件夹

45320

开心档之Java 流(Stream)、文件(File)IO

Java 为 I/O 提供了强大而灵活支持,使其更广泛地应用到文件传输网络编程中。 但本节讲述最基本流与 I/O 相关功能。我们通过一个个例子来学习这些功能。...PrintStream 定义 write() 最简单格式如下所示: void write(int byteval) 该方法 byteval 八位字节写到流中。...下面将要讨论两个重要流是 FileInputStream FileOutputStream。...3 public int read(int r)throws IOException{} 这个方法从 InputStream 对象读取指定字节数据。返回为整数值。...5 public int available() throws IOException{} 返回下一次对此输入流调用方法可以不受阻塞地从此输入流读取字节数。返回一个整数值。

25410

Java数据类型(八种基本数据类型 + 四种引用类型)、数据类型转换

而引用数据类型进行复制时,只会复制对象引用,两个变量指向同一个对象参数传递:基本数据类型作为方法参数传递时,传递是值副本,不会修改原始值。...而引用数据类型使用\==进行比较时,比较是引用是否指向同一个对象,如果要比较对象内容是否相同,需要使用equals()方法注意:Java包装类(Wrapper Classes)对基本数据类型进行了封装...而包装类型使用\==进行比较时,比较是引用是否指向同一个对象,而不是比较值是否相等。若要比较包装类型值是否相等,需要使用equals()方法。...注意:在Java 5及其之后版本中,基本类型包装类型之间转换会通过自动装箱、拆箱来自动进行,使得基本类型包装类型之间使用更加方便3.数据类型转换Java数据转换主要分为两种:自动类型转换(...浮点数到整数转换是通过舍弃小数得到,而不是四舍五入,例如:(int)23.7 == 23;(int)-45.89f == -45;3.1 具体示例int long 互转、intdouble互转、

4.8K11
领券