OpenCore Legacy Patcher完整指南:让老旧Mac免费升级到最新macOS的实用方案
2026/6/2 4:14:41
我们经常会在代码中使用到字节类型进行数据的传输,又或者说在计算机中数据本身就是由一个个字节组成,但往往数据的传输会有部分数据是无用的,这次深入探究一下在socket中如何利用VarInt高效传输字节数据。
VarInt(Variable-Length Integer)是一种变长整数编码方式,旨在使用最小的字节数存储整数。一般为1~5个字节,而其特点就是数值越小,所占用的字节也就越小。
在Java中一个int类型固定需要使用4个字节进行传输,无论是多小的数据,均产生4个字节,例如1在Java中表示为00000000 00000000 00000000 00000001而非00000001,因此在数据传输时会造成宽带的浪费,为了极致压缩传输数据可以使用varint进行压缩,将数字1的4个字节压缩为1个字节0x01。
VarInt不同与正常的字节,它将每一个字节拆分为两个部分:
Flag,当最高位为1时,表示后面还有数据,为0时第代表这是最后一个字节。Payload,这里存储实际的数值片段。这里使用Java进行代码编写,其它语言同理。
publicvoidwriteVarInt(DataOutputStreamout,intvalue){while(true){// 1. 检查是否只剩最后 7 位// ~0x7F 是高位掩码,用于检查高位是否还有值if((value