下面我们会有两个知识点需要讲解: 字节序 varint编码 字节序 计算机在信息传输的过程中都是采用一定的编码格式将数据编码为二进制,当数据接收方收到数据以后也会进行相应的解码将二进制数据转换成响应的格式...首先int类型的数据占据4个字节,以大端序为例我们可以看到123456的高位的第一个字节都是无用的,我们可以使用三个字节就能代表123456,由于Kafka的长度字段的数值都会远远小于123456,甚至...varint是使用一个或多个字节序列化整数的方式,他可以把一个固定字节的整数编码成变长字节。...每一个字节的低7位用于以7位为一组存储数字的二进制补码表示,最低有效数组在前,这也就表明varint编码是按照小端序来排列的。...图中对数字123456进行varint编码,123456用二进制表示为1 11100010 01000000,每次低从向高取7位再加上最高有效位变成11000000 11000100 00000111。
Java内存模型要求,变量的读取操作和写入操作都必须是原子操作,但对于非volatile类型的long和double变量,JVM允许将64位的读操作或写操作分解为两个32位的操作。...当读取一个非volatile类型的long变量时,如果对该变量的读操作和写操作在不同的线程中执行,那么很可能会读取到某个值的高32位和另一个值的低32位。...因此,即使不考虑失效数据问题,在多线程程序中使用共享且可变的long和double等类型的变量也是不安全的,除非用关键字volatile来声明它们,或者用锁保护起来。...其特点是使用灵活,空间比较大,但容易出错 栈区: 由编译器自动分配释放,保存局部变量,栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率高,但空间大小有限 文字常量区:...,长整数,对象四种数据,其内部实现不是简单的使用synchronized,而是一个更为高效的方式CAS (compare and swap) + volatile和native方法,从而避免了synchronized
Java中的 InputStream 和 OutputStream 都是 io 包中面向字节操作的顶级抽象类,关于java同步 io字节流的操作都是基于这两个的。...//实际读取的字节数是以整数形式返回。此方法将阻塞,知道输入数据为止可用,检测到文件结尾,或抛出异常。 //如果b的长度为0,则不读取任何字节,返回0。...字节数,下一次调用可能是同一个线程或另一个线程。...abstract class OutputStream implements Closeable, Flushable { //将指定的字节写入输出流中,一般来说要写入的这个字节是参数的低8位...,高24位忽略。
寄存器的值总是以整数形式存在,基本操作单位为“字” (2 字节整数, 大端模式)。通过数字接口可完成对寄存器的读取和写入(修改)操作。 寄存器写(修改) 操作后可保存于内部存储器,掉电不遗失。...图片数据模式寄存器数据值采用大端模式, 数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,数据帧传输时先传输低地址字节后传输高字节。...每个寄存器对应两个字节,则单个寄存器的值=低字节值*256+高字节值。若无特殊说明,本手册后续章节所述寄存器(或“参数” )均是指两字节构成的 16bit数据。...通讯协议本设备支持标准的工业 MODBUS 通讯协议(03、 04、 06 指令码)和自定义的简单 AABB 协议以及字符串指令集三种协议。...MODBUS 和 AABB 通讯协议支持基于设备地址和总线连接的一主多从应用结构, 在总线中VTN4XX 始终作为从机使用AABB 通讯协议AABB 通讯协议是一种非标准自定义协议, 相较于 MODBUS
在 Java 语言规范中,boolean 类型的值只有两种可能,它们分别用符号“true”和“false”来表示。显然,这两个符号是不能被虚拟机直接使用的。...Java 基本类型的大小 在第一篇中我曾经提到,Java 虚拟机每调用一个 Java 方法,便会创建一个栈帧。为了方便理解,这里我只讨论供解释器使用的解释栈帧(interpreted frame)。...在 Java 虚拟机规范中,局部变量区等价于一个数组,并且可以用正整数来索引。除了 long、double 值需要用两个数组单元来存储之外,其他基本类型以及引用类型的值均占用一个数组单元。...举例来说,当我们把 0xFFFFFFFF(-1)存储到一个声明为 char 类型的字段里时,由于该字段仅占两字节,所以高两位的字节便会被截取掉,最终存入“\uFFFF”。...在加载时 char 的值会被复制到 int 类型的低二字节,而高二字节则会用 0 来填充。 对于 byte、short 这两个类型来说,加载伴随着符号扩展。举个例子,short 的大小为两个字节。
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字节的随机数(字节数组) 对于生成的随机数,清空和重新设置version和variant...的实现步骤如下: 通过输入的命名字节数组基于MD5算法生成一个16字节长度的随机数 对于生成的随机数,清空和重新设置version和variant对应的位 把重置完version和variant的随机数的所有位转移到...,填充到字节缓冲区buf中,如果长度len超过了输入值的ASCII格式表示,则会使用0进行填充 * 这个方法就是把输入长整型值val,对应一段长度的位,填充到字节数组buf中,len控制写入字符的长度
首先我们要都知道, &表示按位与,只有两个位同时为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
一:流的概念 在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方法从输出流批量写出若干字节。
一:流的概念 在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方法从输出流批量写出若干字节。
寄存器的值总是以整数形式存在, 基本操作单位为“ 字” ( 2 字节整数, 大端模式), 有掉电保存和掉电丢失两种类型(对应“ 读/写” 和“ 只读” 两种属性)。...通过模块的数字接口可完成对寄存器的读取和写入(修改)操作。 寄存器写(修改)寿命典型值为 10 万次, 读取次数没有限制。...数据模式寄存器数据值采用大端模式, 数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,数据帧传输时先传输低地址字节后传输高字节。...每个寄存器对应两个字节,则单个寄存器的值=低字节值*256+高字节值。...使用握手协议在读写寄存器时,建议使用 VMXXX 模块的握手协议(非必须),当检测到模块空闲时发起寄存器操作(硬件握手详见“ 2.3.2 硬件握手” ,软件握手详见“ 3.7.2 软件握手” )。
结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。 节点流和处理流的主要区别: 节点流:可以从或向一个特定的数据源(节点)读写数据。...InputStream的基本方法 //读取一个字节,返回一个整数(0~255)。 //结束:返回-1,表示已到输入流的结尾。...数组中(设 k 为实际读取的字节数,这些字节将存储在 b[off] 到 b[off+k-1]);以整数形式返回实际读取的字节数。...OutputStream的基本方法 //向输出流中写入一个字节数据,该字节数据为参数b的低8位 public abstract void write(int b) throws...,并将其转成int值 writeInt(int);//一次写入四个字节,注意和write(int)不同,write(int)只将该整数的最低一个8位写入,剩余三个8为丢失 short
java.io包中定义了多个流类型(类或抽象类)来实现驶入/输出功能;可以从不同的角度对其进行分类: 按处理数据单位不同可以分为输入流和字符流 按照功能不同可以分为节点流和处理流 JDK所提供的所有流类型位于包...InputStream的基本方法 //读取一个字节并以整数的形式返回(0~255) //如果返回-1已到输入流的末尾 int read() throws IOException //读取一系列字节并存储到一个数组...OutputStream的基本方法 //向输入流中写入一个字节数据,该字节数据为参数b的低8位 void write(int b) throws IOException //将一个字节类型的数组中的数据写入输出流...void write(byte[] b) throws IOException //将一个字节类型的数组,从指定位置(buff)开始的len个字节写入到数据流 void write(byte[] b...Write的基本方法 //向输入流写入一个字符数据,该字节数据为参数b的低16位 void write(int c) throws IOException //将一个字符类型数组中的数据写入输出流 void
,批量设置键值incr key,自增,如果无法解析为整数将报错。incrby key increment,加上整数。decr key,自减,如果无法解析为整数将报错。...集合写入sadd key member [member ...],将一个或多个成员元素加入到集合中,已经存在将忽略。读取smembers key,获取集合所有成员。...高并发的基础:IO多路复用,linux的epoll。命令执行采用单线程模型串行化,避免上下文切换和加锁。4.0版本之前网络IO和命令执行都是在一个线程中完成。...4.0版本开始支持网络IO的多线程,命令执行单线程。字符串存储int,字符串长度小于等于12字节且可以表示为整数时,采用int类型。embstr,字符串长度小于40字节时,数据内嵌存储。...应用场景缓存缓存的更新策略内存淘汰,内存不足时淘汰数据。超时剔除,ttl 时间到期删除。主动更新,应用中数据库写入同时更新缓存。根据场景选择更新策略:低一致性或固定数据,使用内存淘汰。
它存储字符串和整数值,其中整数被编码为实际整数,而不是一系列个字符。 它允许对列表的两侧进行push和pop操作且复杂度为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 ) 。
计算机采用八比特一个字节,一个字节最大整数是255,还要表示中文一个字也是不够的,至少需要两个字节,为了统一所有的文字编码,unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码,通常用两个字节表示一个字符...由于英文符号只需要用到低8位,所以其高8位永远是0,因此保存英文文本时会多浪费一倍的空间。...UTF-8就是以字节为单位对unicode进行编码,对不同范围的字符使用不同长度的编码。...字节形式通常称作 UCS-2,在Java中,char类型用UTF-16编码描述一个代码单元,但unicode大于0x10000的部分如何用char表示呢,比如一些emoji:java的char类型占两个字节...codePointAtImpl方法判断当前char是高代理项代码单元,下一个是低代理项代码单元,则这两个char是一个codepoint。
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{} 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。
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类中有两个方法可以用来创建文件夹
而引用数据类型进行复制时,只会复制对象的引用,两个变量指向同一个对象参数传递:基本数据类型作为方法的参数传递时,传递的是值的副本,不会修改原始值。...而引用数据类型使用\==进行比较时,比较的是引用是否指向同一个对象,如果要比较对象的内容是否相同,需要使用equals()方法注意:Java中的包装类(Wrapper Classes)对基本数据类型进行了封装...而包装类型使用\==进行比较时,比较的是引用是否指向同一个对象,而不是比较值是否相等。若要比较包装类型的值是否相等,需要使用equals()方法。...注意:在Java 5及其之后的版本中,基本类型和包装类型之间的转换会通过自动装箱、拆箱来自动进行,使得基本类型和包装类型之间的使用更加方便3.数据类型转换Java中的数据转换主要分为两种:自动类型转换(...浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:(int)23.7 == 23;(int)-45.89f == -45;3.1 具体示例int 和 long 互转、int和double互转、
写入是多么的悬殊。...image.png 3、业界主流编解码框架 (1)Google的Protobuf 将数据结构以.proto文件进行描述,通过代码生成工具可以生成对应数据结构的POJO对象和Protobuf相关的方法和属性...,负责调用服务实现的接口 5、TServer:聚合TProtocol、TTransport和TProcessor等对象 其编解码框架就是TProtocol (3)MessagePack 一个高效的二进制序列化格式...但是它比JSON更快、更小的整数会被编码成一个字节,短的字符串仅仅只需要比它的长度多一字节的大小。...特点:编解码高效,性能高 序列化之后的码流好 支持跨语言 上述就是编解码技术的介绍,之后会聊一下框架的使用
领取专属 10元无门槛券
手把手带您无忧上云