nodejs中存在缓冲区超出范围错误

时间:2018-11-14 04:07:38

标签: node.js buffer

好的,我试图将一个很长的字符串放入缓冲区,但是我一直收到此错误。

  

internal / buffer.js:559       抛出新的ERR_OUT_OF_RANGE('value',>= ${min} and <= ${max},value);       ^

     

RangeError [ERR_OUT_OF_RANGE]:“值”的值超出范围。   必须为> = 0和<=255。已收到9605

我不确定它是否可以解决,但是是否可以告诉我为什么我要解决这个问题以及如何解决?谢谢!

编辑:这是将其放入缓冲区的代码。

build: function(params){
  var packetParts = [];
  var packetSize = 0;
  params.forEach(function(param){
    var buffer;
    console.log(param);
    if(typeof param === "string"){
      buffer = Buffer.from(param);
      buffer = Buffer.concat([buffer, zeroBuffer], param.length + zeroBuffer.length);
    }else if(typeof param === "number"){
      buffer = Buffer.alloc(2);
      buffer.writeUInt16LE(param, 0);
    }else{
      console.log("[CRITICAL] WARNING: Undefined DataType In Packet Builder");
    }
    packetParts.push(buffer);
    packetSize += buffer.length;
  });

  var dataBuffer = Buffer.concat(packetParts, packetSize);
  var sizeBuffer = Buffer.alloc(1);
  sizeBuffer.writeUInt8(dataBuffer.length + 1);

  finalBuffer = Buffer.concat([sizeBuffer, dataBuffer], sizeBuffer.length + dataBuffer.length);
  return finalBuffer;
}

1 个答案:

答案 0 :(得分:0)

It must be >= 0 and <= 255. Received 9605告诉我,您正在尝试写入无法使用十进制9605的字节。

在您的代码上,您有sizeBuffer.writeUInt8(dataBuffer.length + 1);,这证明您正在尝试写一个字节。

但是我认为您不了解一个字节可以容纳多少数据。看到这个:enter image description here

如您所见,对于9605 / uint8 [0-255],unsigned char太大。

我建议:

sizeBuffer.writeUInt16LE(dataBuffer.length + 1);

因为unsigned short最多可以容纳65535,对于您的9605数据包长度来说足够大。

这应该可以纠正错误,但是您可能还需要检查阅读器以读取无符号的短整数而不是无符号的字节。否则,阅读器也会损坏