nodejs buffer偏移量取值问题?

private _extractData(chunk: Buffer): Buffer {
   // 读取数据包大小到 readHeader
   chunk.copy(this.readHeader, 0, 0, chunk.length);
   // 数据包大小
   let bodySize: number = this.readHeader.readInt32BE(0);
   let body: Buffer = Buffer.alloc(bodySize);
   // 拷贝真正数据
   chunk.copy(body, 0, this.readHeader.length, chunk.length);
   return body;
}

这里 this.readHeader.readInt32BE(0) 在遇到内容较长时经常会返回负数值:

RangeError [ERR_INVALID_ARG_VALUE]: The argument 'size' is invalid. Received -443709664
at Function.alloc (node:buffer:372:3)

这个 Buffer 偏移量该如何纠正

阅读 1.8k
1 个回答
private _extractData(chunk: Buffer): Buffer {
   // 读取数据包大小到 readHeader
   const copyLength = Math.min(chunk.length, this.readHeader.length);
   chunk.copy(this.readHeader, 0, 0, copyLength);
   // 数据包大小
   let bodySize: number = this.readHeader.readInt32BE(0);
   if (bodySize < 0) {
       throw new Error('Invalid body size: ' + bodySize);
   }
   let body: Buffer = Buffer.alloc(bodySize);
   // 拷贝数据
   chunk.copy(body, 0, copyLength, chunk.length);
   return body;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏