我有以下代码:
var packet = "\xFF\xFF\xFF\xFF";
packet += "\x6D";
packet += "127.0.0.1:" + this.port;
packet += "\x00";
packet += this.name;
packet += "\x00";
packet += this.map;
packet += "\x00";
packet += "game1";
packet += "\x00";
packet += "x-z";
packet += "\x00";
packet += String.fromCharCode(this.players.length);
packet += String.fromCharCode(this.maxplayers);
packet += String.fromCharCode(this.protocol);
packet += "\x64";
packet += "\x6C";
packet += "\x00";
packet += "\x01";
packet += "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00";
return new Buffer(packet, "binary");
我现在正在从字符串创建缓冲区,但我认为这不是一个好的做法,字符串连接效率不高。
如何用Buffer函数替换它并直接写入缓冲区?
我无法理解Buffer的工作原理,例如,如何在开头写入4 \xFF
个字节。
谢谢。
答案 0 :(得分:1)
如果数据包的大小是固定的,那么可以使用one of the many Buffer methods直接写入缓冲区。
从包含所有静态数据的静态字符串初始化,并将自定义数据留空。稍后使用预先计算的偏移量将自定义数据直接写入缓冲区。
这可能看起来像这样:
var static = "\xFF\xFF\xFF\xFF.........";
var buff = new Buffer(static, 'binary');
buff.write(this.port, portStartOffset, portStringLength, 'binary');