为什么在fs.write中的偏移量参数不适用于缓冲区,而是使用string

我遇到了fs.write(fd,buffer,offset,length,position,callback)的问题;

如果我做:

var fs = require('fs'); var fd = fs.openSync('./test', 'w'); var firstString = '012'; var secondString = 'hello'; fs.writeSync(fd, firstString, 0, firstString.length); fs.writeSync(fd, secondString, 2, secondString.length); 

文件“test”的内容如预期的那样是“01hello”

但是,如果我这样做

 var fs = require('fs'); var fd = fs.openSync('./test', 'w'); var firstBuffer = new Buffer('012'); var secondBuffer = new Buffer('hello'); fs.writeSync(fd, firstString, 0, firstBuffer.length); fs.writeSync(fd, secondString, 2, secondBuffer.length); 

文件“testing”的内容是“012”,我得到以下错误:

 fs.js:429 return binding.write(fd, buffer, offset, length, position); Error: off + len > buffer.length at Object.fs.writeSync (fs.js:429:18) [...] 

你能解释一下为什么我的缓冲区出错了吗?

感谢你的回答,我发现当你给一个string或一个缓冲区时有一个区别:position参数是不一样的。

用一个string,位置参数是数字2:

 fs.writeSync(fd, secondString, 2, secondString.length); 

有一个缓冲区,位置参数是数字4,正如文档所说:

 fs.writeSync(fd, secondBuffer, 0, secondBuffer.length, 2); 

非常感谢您的帮助。

从Node.js文档http://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback

偏移量和长度决定了要写入的缓冲区部分

您的代码尝试访问字节2到7(2 + 5)。 如果要附加到该文件,请使用fs.append