您应该实现适当的 length-prefixing ,而不是用字符串来表示您的数据包长度,然后减去该字符串的长度来知道从哪里开始读取。长度前缀与数据头结合使用将使您能够根据数据包的大小读取每个数据包,然后数据头将帮助您确定如何处理数据。
普通的长度前缀为您发送的每个“数据包”添加一个固定的报头。要创建此标头,您需要将整数(数据的长度)转换为字节,这将导致4个字节,然后在其后添加数据标头以及数据包的其余部分(即您要发送的数据) 。
这将创建以下数据包结构:
[Length (4 bytes)][Header (1 byte)][Data (x byte(s))]
读取数据包非常简单:
读取前4个字节(Length
),将其转换并将其分配给整数变量。
读取下一个字节(数据头)并将其放入变量中。
x
将字节读取到字节数组(其中x
是您在步骤1中声明的整数)。
使用步骤2中的数据标头确定如何处理数据(步骤3中的字节数组)。