如图 就是我要接受的数据 开始4个字节为消息的长度,后面的4个字节是消息的类型,后面就是消息的内容 现在我必须要先读取到消息的类型接着做消息的处理这个是我接受消息的 byte bytebuf[] = new byte[1024]; int len = dateInput.read(bytebuf); if(len!=-1){ String mStr = new String(bytebuf); System.out.println("十六进制数"+str2HexStr(mStr)); } 打印出来的结果是 |
|
就没有大神帮帮忙吗
|
|
30分 |
用DataInputStream,先readInt读取四个字节的消息长度,然后再readInt读取四个字节的消息类型,然后根据消息的长度构造一个byte数组,然后readFully这个数组就哦了…
|
10分 |
问题应该在你new string的时候,出现了编码错误,这个默认编码里边不含前面8个字节的文字,所以默认变为?之类的东西,然后你再把string改为byte数组的时候,字节数据已经发生了变化。本来就是不是string的东西,最好不要 new string(***)出来
|
尝试先用readInt读取4个字节 可是读出来的Int是正确的.. |
|
尝试先用readInt读取4个字节 可是读出来的Int是不正确的.. |
|
问题解决了,采用一个byte一个byte的读取 就可以了,接着再将4个byte组合起来因为Int读取的话会有个高位地位的区别所以读取Int才可能不太正确,这个是我的猜想。
感谢了。 |