【问题标题】:Using NodeJS buffer使用 NodeJS 缓冲区
【发布时间】:2013-05-19 06:49:48
【问题描述】:

我有以下代码:

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字节。

谢谢。

【问题讨论】:

  • 这没有什么问题,因为在创建缓冲区时需要知道缓冲区的大小。根据您的计划,可能不会创建缓冲区并直接流式传输数据。
  • @TheHippo 嗯...固定缓冲区大小怎么样?我正在使用固定(1400 字节)长度的数据包。

标签: javascript node.js hex packet


【解决方案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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 2023-03-02
    • 1970-01-01
    • 2016-07-04
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多