使用BinaryReader和BinaryWriter时,另一端接收数据要进行处理。
因为C#服务端会先计算传输数据的长度,然后把长度转为byte值插入到传输数据的头部,再进行传输的,对源码进行反射,看源码, 下面传入的value值为传输数据的长度
protected void Write7BitEncodedInt(int value)
{
uint num = (uint) value;
while (num >= 0x80)
{
this.Write((byte) (num | 0x80));
num = num >> 7;
}
this.Write((byte) num);
}
因此,在android端进行接收时,要先对数据流进行解析时,要分析出它的长度
private final int read7BitEncodedInt()
{
byte num3;
int num = 0;
int num2 = 0;
try
{
do
{
if (num2 == 0x23)
{
throw new Exception("Format_Bad7BitInt32");
}
num3 = (byte)this.read();
num |= (num3 & 0x7f) << num2;
num2 += 7;
}
while ((num3 & 0x80) != 0);
}
catch(Exception e)
{
e.printStackTrace();
}
return num;
}
最后来进行读取,即可得出完整的数据流