javascript - NodeJS Buffer.write() 在写入索引 >= 100,000 时返回 0
问题描述
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
在 nodeJS 中,Buffer.write() 通常返回写入缓冲区的字节数。当我尝试写入任何 >= 100,000 的索引时,它返回 0。我读到最大缓冲区大小为 1GB(32 位)和 2GB(64 位),所以我认为这不是问题。
日志说:
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
解决方案
我有一个使用 15MB 缓冲区的项目,所以 100,010 字节完全没有问题。
我写这个作为一个答案,这样我就可以向你展示我编写的代码,并且这个代码在完全独立运行时工作得很好:
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);
它记录5
了您所期望的。
为了让我们进一步帮助您,您需要发布一个Minimal, Reproducible Example。
仅供参考,我还尝试将相同的代码拆分为您显示的两个文件。没有不同。除了您显示的代码之外,还有其他原因导致您的环境出现问题。
而且,还有一点:
在 node.js 中,对缓冲区的整个全局使用是可憎的。将共享缓冲区封装在一个模块中,让每个想要使用共享缓冲区的文件导入您的缓冲区模块以访问共享缓冲区。这就是你应该在 node.js 中编码的方式,而不是像这样使用全局变量。
推荐阅读
- android - 如何为 ArrayList 创建可点击(初始化未点击)适配器
在 Android Studio 中? - node.js - node npm 命令立即关闭命令提示符
- php - php strtotime '第三天 + 1 个月' = false
- r - 如何解决 r 中弹性包中的“curl 中的错误:Broken pipe”
- javascript - 如何将 Dialog 组件添加到 BottomNavigation
- data-vault - Data Vault 将多个集线器连接成链接,是使用一个链接的最佳方式,还是拆分链接始终是 Data Vault 中的好方法?
- javascript - 我们如何一个一个地提取数字?
- html - 如何为html中的链接配置嵌套路径
- javascript - 下拉单击禁用悬停并在悬停时触发 JS 功能
- javascript - 双间隔调用,它不应该在 node.js 中