关于socket通信接受byte数组问题

saii 2015-03-14 09:54:33
如图 就是我要接受的数据 开始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));
}


打印出来的结果是

前面的FA被EF BF BD取代了,求高手帮忙解释下 到底是什么原因
...全文
833 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
saii 2015-03-15
  • 打赏
  • 举报
回复
问题解决了,采用一个byte一个byte的读取 就可以了,接着再将4个byte组合起来因为Int读取的话会有个高位地位的区别所以读取Int才可能不太正确,这个是我的猜想。 感谢了。
saii 2015-03-15
  • 打赏
  • 举报
回复
引用 2 楼 u012809889 的回复:
用DataInputStream,先readInt读取四个字节的消息长度,然后再readInt读取四个字节的消息类型,然后根据消息的长度构造一个byte数组,然后readFully这个数组就哦了...
尝试先用readInt读取4个字节 可是读出来的Int是不正确的..
saii 2015-03-15
  • 打赏
  • 举报
回复
引用 2 楼 u012809889 的回复:
用DataInputStream,先readInt读取四个字节的消息长度,然后再readInt读取四个字节的消息类型,然后根据消息的长度构造一个byte数组,然后readFully这个数组就哦了...
尝试先用readInt读取4个字节 可是读出来的Int是正确的..
lsongiu86 2015-03-15
  • 打赏
  • 举报
回复
问题应该在你new string的时候,出现了编码错误,这个默认编码里边不含前面8个字节的文字,所以默认变为?之类的东西,然后你再把string改为byte数组的时候,字节数据已经发生了变化。本来就是不是string的东西,最好不要 new string(***)出来
许伊凡的伊凡 2015-03-15
  • 打赏
  • 举报
回复
用DataInputStream,先readInt读取四个字节的消息长度,然后再readInt读取四个字节的消息类型,然后根据消息的长度构造一个byte数组,然后readFully这个数组就哦了...
saii 2015-03-14
  • 打赏
  • 举报
回复
就没有大神帮帮忙吗

67,544

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧