function parseMessage (buff){
let obs = [];
let done = false;
let offset = 0;
let size_bytes = 4;
while(!done){
let message_size = buff.readUIntBE(offset, size_bytes);
let message = buff.readUIntBE(size_bytes+offset,Number(message_size));
console.log(buff,message.toString());
offset = size_bytes+offset+message_size;
try {
let o = JSON.parse(message.toString());
if (o && typeof o === "object") {
obs.push(o);
}
}
catch (e) {console.log(e);console.log(message.toString());}
if(offset >= buff.length){
done = true;
}
}
return obs;
};
let buff = new Buffer("\0\0\0\02ab");
parseMessage(buff);
输出<Buffer 00 00 00 02 61 62> '24930'
而不是<Buffer 00 00 00 02 61 62> 'ab'
2
前置ab
描述了长度。这是因为缓冲区将与套接字一起使用。
如果我这样做:
message.toString(16)
我能够获得ascii代码6162
,但它们仍然不是字符。