1

私は次のコードを持っています:

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");

現在、文字列からバッファを作成していますが、これは良い習慣ではなく、文字列の連結は効率的ではないと思います。これをバッファ関数に置き換えて、バッファに直接書き込むにはどうすればよいですか? \xFFBuffer の仕組み、例えば先頭に 4 バイトを書き込む方法がわかりません。

ありがとうございました。

4

1 に答える 1

1

パケットのサイズが固定されている場合は、多くの Buffer メソッドの 1 つを使用して、バッファに直接書き込むことができます。

すべての静的データを含む静的文字列から初期化し、カスタム データを空白のままにします。後で、事前に計算されたオフセットを使用して、カスタム データをバッファーに直接書き込みます。

これは、次のようになります。

var static = "\xFF\xFF\xFF\xFF.........";
var buff = new Buffer(static, 'binary');
buff.write(this.port, portStartOffset, portStringLength, 'binary');
于 2013-05-20T15:02:26.903 に答える