Node.js的fs.read API中position参数的具体作用是什么?
fs.read 中 position 参数运行逻辑详解 核心参数区分
你之前的认知存在两个参数的作用对象混淆,两个参数的职责完全独立:
offset:作用于你传入的接收读取结果的Buffer对象,单位为字节,代表读取到的内容从Buffer的第offset位开始写入,比如传0就从缓冲区起始位置开始写position:作用于被读取的源文件,单位为字节,代表读取操作从文件的第position位开始取内容
position 不同传值的行为差异
文档中提到的「position为整数类型时文件指针保持不变」,是和position传null/不传的场景做对比的:
- 当你不传
position或者传null时:- 读取操作以当前文件内置指针的位置作为起始点
- 读取完成后,文件指针会自动向后移动本次读取的字节数,后续不带
position的读取操作会顺着本次结束的位置继续读
- 当你明确传入整数类型的
position时:- 读取操作直接忽略当前文件指针的位置,强制从你指定的
position位置开始读 - 读取完成后不会修改原有的文件指针,后续不带
position的读取操作,还是会从本次调用之前的指针位置继续执行
- 读取操作直接忽略当前文件指针的位置,强制从你指定的
实际运行示例
假设有一个内容为0123456789abcdef(共16字节)的测试文件,执行以下操作的结果如下:
- 第一次调用
fs.read,不传入position,读4字节:返回结果为0123,文件指针自动移动到第4位 - 第二次调用
fs.read,传入position: 10,读2字节:返回结果为ab,文件指针仍停留在第4位,不会变动 - 第三次调用
fs.read,不传入position,读4字节:返回结果为4567,承接第一次调用结束后的指针位置继续读取
fs.readSync的position参数逻辑和上述完全一致,没有差异。
内容的提问来源于stack exchange,提问作者phoenixdown
相关产品推荐
相关产品推荐

