【发布时间】:2020-07-04 03:18:07
【问题描述】:
我正在使用 node.js 在网页上制作游戏服务器信息部分,为了获取服务器信息,我使用 net.socket 向服务器发送信息请求并将它们发回。 游戏客户端是用java编写的,并像这样解析服务器发送的数据:
public static Object[] readParameters(DataInputStream paramDataInputStream) throws IOException {
int i;
Object[] arrayOfObject = new Object[i = paramDataInputStream.readInt()];
for (byte b = 0; b < i; b++) {
byte[] arrayOfByte; byte b1;
switch (b1 = (byte)paramDataInputStream.read()) {
case 2:
arrayOfObject[b] = Long.valueOf(paramDataInputStream.readLong());
break;
case 4:
arrayOfObject[b] = paramDataInputStream.readUTF();
break;
case 3:
arrayOfObject[b] = Float.valueOf(paramDataInputStream.readFloat());
break;
case 1:
arrayOfObject[b] = Integer.valueOf(paramDataInputStream.readInt());
break;
case 5:
arrayOfObject[b] = Boolean.valueOf(paramDataInputStream.readBoolean());
break;
case 6:
arrayOfObject[b] = Byte.valueOf(paramDataInputStream.readByte());
break;
case 7:
arrayOfObject[b] = Short.valueOf(paramDataInputStream.readShort());
break;
case 8:
arrayOfByte = new byte[paramDataInputStream.readInt()];
paramDataInputStream.readFully(arrayOfByte);
arrayOfObject[b] = arrayOfByte;
break;
default:
throw new IllegalArgumentException("Type: " + arrayOfByte + " unknown. parameter " + b + " of " + i);
}
}
return arrayOfObject;
}
网页是使用 node.js 和 express 托管的,我调整了解析功能:
//data is a buffer
function readParameter(data){
var indexI = 0;
function sRead(buffer){
var tempVar = buffer.readUInt8(indexI);
indexI += 1;
return tempVar;
}
function sReadByte(buffer){
var tempVar = buffer.readInt8(indexI);
indexI += 1;
return tempVar;
}
function sReadShort(buffer){
var tempVar = buffer.readInt16BE(indexI);
indexI += 2;
return tempVar;
}
function sReadInt(buffer){
var tempVar = buffer.readInt32BE(indexI);
indexI += 4;
return tempVar;
}
function sReadFloat(buffer){
var tempVar = buffer.readFloatBE(indexI);
indexI += 4;
return tempVar;
}
function sReadLong(buffer){
var tempVar = buffer.readBigInt64BE(indexI);
indexI += 8;
return tempVar;
}
function sReadBoolean(){
var tempA = buffer.readUInt8(indexI);
indexI += 1;
if(tempA==0){
return false;
}else{
return true;
}
}
function sReadFully(buffer){
var tempA = buffer.slice(indexI);
indexI = tempA.length;
return tempA;
}
var i = sReadInt(data);
var arrayOfObject = [];
for(var b = 0; b < i; b++){
var arrayOfByte = [];
var b1 = sRead(data);
switch(b1){
case 1:
arrayOfObject[b] = sReadInt(data);
break;
case 2:
arrayOfObject[b] = sReadLong(data);
break;
case 3:
arrayOfObject[b] = sReadFloat(data);
break;
case 4:
//Don't know how to handle it, want result similar to DataInputStream.readUTF() from java
break;
case 5:
arrayOfObject[b] = sReadBoolean(data);
break;
case 6:
arrayOfObject[b] = sReadByte(data);
break;
case 7:
arrayOfObject[b] = sReadShort(data);
break;
case 8:
sReadInt(data);
arrayOfByte = sReadFully(data);
arrayOfObject[b] = arrayOfByte;
break;
default:
console.log("Type :" + arrayOfByte + "unknown. parameter " + b + " of " + i);
break;
}
}
return arrayOfObject;
}
但我不知道如何在 node.js 中的“案例 4:”中从 java 中获得与 readUTF() 相同的结果。
我该怎么做?
提前感谢您的帮助!
【问题讨论】:
-
您需要编写将字节解释为modified UTF-8的代码。
标签: javascript java node.js