Javascript 当写入大于等于100000的索引时,NodeJS Buffer.write()返回0

Javascript 当写入大于等于100000的索引时,NodeJS Buffer.write()返回0,javascript,node.js,data-structures,buffer,nodes,Javascript,Node.js,Data Structures,Buffer,Nodes,在nodeJS中,Buffer.write通常返回写入缓冲区的字节数。 当我尝试写入任何大于等于100000的索引时,它返回0。我了解到最大缓冲区大小是1GB 32位和2GB 64位,所以我认为这不是一个问题 日志上写着: main.js global.buff = Buffer.alloc(100010) global.index = 0 buffer.js bytes_written = global.buff.write(data, glo

在nodeJS中,Buffer.write通常返回写入缓冲区的字节数。 当我尝试写入任何大于等于100000的索引时,它返回0。我了解到最大缓冲区大小是1GB 32位和2GB 64位,所以我认为这不是一个问题

日志上写着:

main.js
        global.buff = Buffer.alloc(100010)
        global.index = 0

buffer.js
        bytes_written = global.buff.write(data, global.buff_idx)
        global.buff_idx += bytes_written

我有一个使用15MB缓冲区的项目,所以100010字节根本没有问题

我写这篇文章是为了回答这个问题,以便向您展示我编写的代码,而这段代码在完全独立运行时运行良好:

index before: 95142  offset: 1605  index after: 96747
index before: 96747  offset: 2195  index after: 98942
index before: 98942  offset: 1058  index after: 100000
index before: 100000 offset: 0     index after: 100000
index before: 100000 offset: 0     index after: 100000
它的日志记录为5,这是您所期望的

为了让我们进一步帮助您,您需要发布一个

仅供参考,我也尝试过将相同的代码拆分为两个文件,如您所示。没有区别。除了您显示的代码之外,还有其他原因导致您的环境中出现问题

还有一点:


在node.js中,缓冲区的这种全局使用是一种令人厌恶的行为。将共享缓冲区封装在一个模块中,让每个想要使用共享缓冲区的文件导入缓冲区模块,以访问共享缓冲区。这就是在node.js中编码的方式,而不是像这样使用全局变量

globa.buff是打字错误吗?还有,是你刚才写了一个几乎相同的问题,然后在我键入答案时将其删除的吗?如果global.index在某个地方发生名称冲突,我一点也不会感到惊讶。在这里使用globals是不好的,但对于全局变量来说,这是一个非常糟糕的名称。是的,这只是一个示例代码,我在代码中使用了更好的名称。我删除了旧的一个,因为它在变量不是全局变量时有效,但在全局变量时无效。我希望了解为什么全局缓冲区有100000字节的上限,为什么没有任何地方记录它。我有一个使用15兆字节缓冲区的nodejs项目。没有100000字节的上限。整个缓冲区的全局使用是一个令人憎恶的问题。将共享缓冲区封装在一个模块中,只需让想要使用共享缓冲区的每个文件导入缓冲区模块即可访问共享缓冲区。这就是在node.js中编码的方式,而不是像这样使用全局变量。谢谢,我会调查的。
global.buff_idx = 0;
global.buff = Buffer.alloc(100010);

let data = "12345";

let bytes_written = global.buff.write(data, global.buff_idx);
global.buff_idx += bytes_written;
console.log(bytes_written);