You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Node.js向文件写入Buffer时会出现部分字节丢失的问题?

问题根因
  • 这是Windows平台文本模式/二进制模式文件打开方式的差异导致的,不属于fs.writeSync接口的bug
具体原因
  • NodeJS的fs.openSync接口使用a作为flag时,Windows系统下默认以文本模式打开文件:文本模式会对特殊控制字符做转换/截断处理,你写入的0x00(NULL字符)会被系统过滤,导致实际写入文件的字节数少于预期
  • 你遇到的5字节写入正常是Windows文本模式的处理逻辑随字节长度对齐规则变化的偶现表现,不代表问题不存在
修复方案

将打开文件的flag从a改为ab(二进制追加模式),明确指定以二进制方式操作文件,即可避免系统自动过滤控制字符的问题:

const fs = require('fs');
// 把第二个参数'a'改成'ab'
let infoFile = fs.openSync('field.info', 'ab');
fs.writeSync(infoFile, Buffer.from([0x06, 0x00, 0x04, 0x00]))
fs.closeSync(infoFile);
补充说明
  • 跨平台操作二进制文件时,永远显式指定二进制flag(带b后缀,比如rb/wb/ab),可以避免不同操作系统下文本模式的默认处理逻辑差异带来的异常
  • 你看到的fs.writeSync返回值和实际写入不符是正常表现:返回值是NodeJS层面传递给系统调用的字节数,系统层面的字符过滤是在内核写入阶段执行的,不会反向修改这个返回值

内容的提问来源于stack exchange,提问作者Nathan Goings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:48:01