node梳理之stream
fs.createReadStream(path[, options]): 创建一个可读流,用于从文件中读取数据。
fs.createWriteStream(path[, options]): 创建一个可写流,用于将数据写入文件。流对象会发出多种事件,常用的事件包括:data: 当有数据可读时触发。每次读取到数据块时都会触发。
end: 当没有更多数据可读时触发。
error: 当发生错误时触发。
finish: 当所有数据都已写入可写流时触发。pipe(destination[, options]): 将可读流的数据直接写入到可写流中。可以指定选项,例如 { end: false } 来控制源流结束时是否关闭目标流。
unpipe(destination): 停止将数据从可读流传输到可写流。
resume(): 继续读取流中的数据。
pause(): 暂停读取流中的数据。const fs = require('fs');const readableStream = fs.createReadStream('input.txt');
const writableStream = fs.createWriteStream('output.txt');readableStream.pipe(writableStream).on('finish', () => {console.log('数据写入完成!');})
node梳理之stream
在 Node.js 中,Buffer 是一个用于处理二进制数据的全局对象。它提供了一种处理流数据的方式,特别是当处理文件、网络请求或其他二进制数据时。Buffer 的基本概念
字节:Buffer 以字节为单位处理数据,每个字节的范围是 0 到 255。
大小:Buffer 的大小是固定的,不能动态改变。
创建 Buffer
const bufferFromString = Buffer.from('Hello, World!');
const bufferFromArray = Buffer.from([1, 2, 3, 4, 5]);
const bufferAlloc = Buffer.alloc(10); // 创建一个大小为 10 字节的 BufferBuffer 的常用方法
// Buffer.concat(list[, totalLength]):将多个 Buffer 合并为一个 Buffer。
const buffer1 = Buffer.from('Hello, ');
const buffer2 = Buffer.from('World!');
const combined = Buffer.concat([buffer1, buffer2]);// buffer.toString([encoding][, start][, end]):将 Buffer 转换为字符串,默认编码为 UTF-8。
const str = combined.toString(); // 'Hello, World!'// buffer.copy(target[, targetStart][, sourceStart][, sourceEnd]):将 Buffer 的数据复制到另一个 Buffer。
const targetBuffer = Buffer.alloc(10);
combined.copy(targetBuffer);Buffer 的性能
Buffer 在处理大数据量时性能优越,因为它在内存中是连续的,避免了频繁的内存分配和复制。
buffer使用案例
// buffer使用案例
const fs = require('fs');// 读取文件并转换为 Base64
fs.readFile('input.txt', (err, data) => {if (err) {return console.error('读取文件时出错:', err);}// 将文件内容转换为 Bufferconst buffer = Buffer.from(data);// 转换为 Base64 编码const base64Data = buffer.toString('base64');// 将 Base64 编码写入新文件fs.writeFile('output.txt', base64Data, (err) => {if (err) {return console.error('写入文件时出错:', err);}console.log('文件成功写入 Base64 编码!');});
});