详细问题描述
[内容]
使用socket建立h5+app移动端和java服务器端连接并传输byte流数据。然而当java传输值为负数的byte数据时,移动端接收到的值并非8位2进制byte,而是16位二进制补码的值。
重现步骤
[步骤]
- 服务端与h5+app建立连接
- 服务端发送包含负数的byte流
- h5+app端使用java.io.InputStreamReader接收byte流,但收到的值出现错误
[结果]
10,
16,
48,
48,
57,
55,
50,
48,
48,
48,
49,
49,
48,
48,
48,
48,
48,
48,
16,
65533,
65533,
6,
26,
12,
27979,
35797,
25151,
38388,
32,
65533,
75,
40,
1,
50,
6,
24322,
24120
[如果语言难以表述清晰,拍一个视频或截图,有图有真相]
- 服务端发送的bytes流:
见附件1-3
- h5+app接收到的值
见附件4
IDE运行环境说明
[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]
HBuilderX
[windows版本号]
windows10
uni-app运行环境说明
[运行端是h5或app或某个小程序?]
h5+app
[运行端版本号]
[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]
HBuilderX
[编译模式是老模板模式还是新的自定义组件模式?]
App运行环境说明
[Android版本号]
Android7.0
[手机型号]
小米5s
附件
[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]
[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]
[可重现代码片段]
方法readMessage中br.read()读出来的可能不是一个8位2进制byte
methods:{
readMesssage: function(){
var br = new this.InputStreamReader(this.socket.getInputStream());
var bytesResult = new Array();
var byte = -1;
var bytesLen = new Array();
for(var i = 0 ;i < 4;i++){
byte = br.read(); //出错点
bytesLen.push(byte);
}
var len = this.bytesToInt(bytesLen);
console.log(len);
var type = br.read(); //出错点
console.log(type);
var data = new Array();
for(var i = 0 ;i < len;++i){
console.log(i+": "+data);
byte = br.read(); //出错点
data.push(byte);
console.log(i+": "+data);
}
console.log(data);
return data;
},
</script>
联系方式
[QQ]
1092772959