Node.js 是一个基于 Chrome V8 引擎的轻量级 JavaScript 运行时环境,适用于高并发、数据密集型、实时的 Web 应用程序。在 Node.js 中,Buffer 和 Stream 是常用的模块,可用于文件操作。本文将介绍如何使用 Buffer 和 Stream 在 Node.js 中进行文件的读写操作。
Buffer
在 Node.js 中,Buffer 是一个全局对象,用于处理二进制数据。Buffer 可以将字符串、数组或者其他可迭代对象转化为二进制数据,也可以将二进制数据转化为字符串或 JSON 数据。Buffer 可以用于网络数据传输、加密解密、图片处理等操作。
创建 Buffer 对象
在 Node.js 中,可以通过以下方式创建 Buffer 对象:
-- -------------------- ---- ------- -- ----- ----------- - - ------ -- ----- ---- - ----------------- -- ----- ----------- - - ------ -- ----- ---- - ---------------- --- -- ----- -------- ------ -- ----- ---- - ----------------------- -- ---- ----- ------- ------ -- ----- ---- - ------------------ -------- -- --------- ------ -- ----- ---- - --------------- -- -- -- ----
读写文件
在 Node.js 中,可以使用 fs 模块来读取和写入文件。通过 Buffer 和 fs 模块的结合使用,可以实现二进制文件的读取和写入。
下面是一个简单的示例,从文件中读取二进制数据,并将其保存到 Buffer 对象中:
-- -------------------- ---- ------- ----- -- - -------------- ------------------------ ----- ----- -- - -- ----- - ------------------- ------- - ----- --- - ------------------ ------------------- ------------ ------------------- -------------------------------- ---
在上面的示例代码中,通过 fs.readFile 方法读取了 input.txt 文件中的内容,并将其保存到 Buffer 对象中。console.log 方法将所保存的 Buffer 对象输出到控制台,并将其转换为 UTF-8 字符串。
下面是一个将 Buffer 对象写入文件的示例代码:
-- -------------------- ---- ------- ----- -- - -------------- ----- --- - ------------------ -------- -------------------------- ---- ----- -- - -- ----- - ------------------- ------- - ---------------------- ---
在上面的示例代码中,通过 fs.writeFile 方法将 Buffer 中的数据写入到 output.txt 文件中。
Stream
在 Node.js 中,Stream 是一种处理流式数据的抽象接口。Stream 可以用于处理网络数据传输、文件读写、加密解密等操作。Stream 分为可读流、可写流和双工流。
可读流
在 Node.js 中,可以通过 fs.createReadStream 方法创建一个可读流,用于读取文件中的数据。
下面是一个简单的示例代码:
-- -------------------- ---- ------- ----- -- - -------------- ----- -- - -------------------------------- - -------------- -- --- ------------- ------- -- - --------------- --------------- ---------------- --- ------------ -- -- - ------------------------ ---
在上面的示例代码中,通过 fs.createReadStream 方法创建了一个可读流对象 rs。highWaterMark 参数指定了每次读取的最大字节数。当数据可读时,会触发 'data' 事件,当数据读取完毕时,会触发 'end' 事件。
可写流
在 Node.js 中,可以通过 fs.createWriteStream 方法创建一个可写流,用于将数据写入文件中。
下面是一个简单的示例代码:
-- -------------------- ---- ------- ----- -- - -------------- ----- -- - ----------------------------------- --- ---- - - -- - - ------ ---- - --------------- ---------- - --------- --------------- -- -- - ------------------------ ---
在上面的示例代码中,通过 fs.createWriteStream 方法创建了一个可写流对象 ws。使用 write 方法写入数据,使用 end 方法结束写入操作。当所有数据写入完成时,会触发 'finish' 事件。
双工流
在 Node.js 中,可以通过 stream.Duplex 类创建一个双工流对象,双工流同时支持读取和写入操作。
下面是一个简单的示例代码:
-- -------------------- ---- ------- ----- ------ - ------------------ ----- -------- ------- ------------- - ------------- - -------- ---------- - -- - ----------- - ---------------- ---------------------- -- ----------- - --- - ---------------- - - ------------- --------- --------- - --------------- --------------- --------------- ----------- - - ----- ------ - --- ----------- ----------------- ------- -- - --------------- --------------- --------------- --- --------------------- -- -- - ---------------------- ---
在上面的示例代码中,通过继承 stream.Duplex 类创建了一个 MyDuplex 类。当可读流被读取时,将发送数据,并在每次读取最多 10 次数据后自动停止。当可写流被写入时,将输出已写入的数据。使用 duplex.write 方法写入数据,当数据写入完成时,会触发回调函数。
总结
通过上面的实例代码,我们可以看出在 Node.js 中使用 Buffer 和 Stream 实现文件操作非常简单。Buffer 可以将字符串、数组或者其他可迭代对象转化为二进制数据,也可以将二进制数据转化为字符串或 JSON 数据。Stream 分为可读流、可写流和双工流,可用于处理网络数据传输、文件读写、加密解密等操作。其中可读流和可写流是单向流,而双工流是两个方向都可以的流。
在实际的应用中,我们可以根据实际的需求来选择适合的模块进行文件操作。同时,在进行文件读写操作时,也需要注意文件的扩展名、编码格式等一些细节问题,保证读写的正确性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9a9e85ad90b6d0417b94e