扬帆大鱼
目前有三种编写文件的方法:fs.write(fd, buffer, offset, length, position, callback)您需要等待回调,以确保缓冲区被写入磁盘。没有缓冲。fs.writeFile(filename, data, [encoding], callback)所有数据必须同时存储;不能执行顺序写入。fs.createWriteStream(path, [options])创建WriteStream,这很方便,因为您不需要等待回调。但同样,它没有缓冲。A WriteStream顾名思义,是一条小溪。根据定义,流是“一个缓冲区”,它包含向一个方向移动的数据(源►目标)。但可写流不一定是“缓冲”的。当您编写时,流将被“缓冲”。n时间和时间n+1,流将缓冲区发送到内核(因为它已满,需要刷新)。换言之:“缓冲区”是对象。它是否“被缓冲”是该对象的属性。如果您查看代码,WriteStream从可写的Stream对象。如果您注意,您将看到它们如何刷新内容;它们没有任何缓冲系统。如果写入字符串,则将其转换为缓冲区,然后发送到本机层并写入磁盘。在编写字符串时,它们没有填充任何缓冲区。所以,如果你这样做了:write("a")write("b")write("c")你在做:fs.write(new Buffer("a"))fs.write(new Buffer("b"))fs.write(new Buffer("c"))那是三调用I/O层。虽然您使用的是“缓冲区”,但数据并不是缓冲的。缓冲流可以:fs.write(new Buffer ("abc")),对I/O层的一个调用。到目前为止,Node.js v0.12(公布的稳定版本为02/06/2015)现在支持两个功能:cork()和uncork()..看来,这些函数最终将允许您缓冲/刷新写调用。例如,在Java中有一些类提供缓冲流(BufferedOutputStream, BufferedWriter.)。如果您编写了三个字节,这些字节将存储在缓冲区(内存)中,而不是只执行三个字节的I/O调用。当缓冲区已满时,内容将被刷新并保存到磁盘中。这提高了性能。我没有发现任何东西,只是记得应该如何进行磁盘访问。