响应式网站好还是自适应网站好,公司网站开发费入什么科目,福建省漳州市建设厅网站,网站素材设计框架Node.js 本身没有像 Java 那样严格区分字符流和字节流#xff0c;区别主要靠编码#xff08;encoding#xff09;来控制数据是以 Buffer#xff08;二进制字节#xff09;形式还是字符串#xff08;字符#xff09;形式处理。 详细解释#xff1a;
方面JavaNode.js字节…Node.js 本身没有像 Java 那样严格区分字符流和字节流区别主要靠编码encoding来控制数据是以 Buffer二进制字节形式还是字符串字符形式处理。 详细解释
方面JavaNode.js字节流InputStream / OutputStream默认情况下的 Readable / Writable 流数据是 Buffer二进制字符流Reader / Writer流上设置 encoding数据自动转换成字符串UTF-8、ASCII 等编码处理字节流和字符流类分开编码需自己控制Buffer 是二进制字节设置 encoding 自动转换成字符示例FileInputStream vs FileReaderfs.createReadStream encoding 参数API差异不同基类区别明显同一套流 API参数控制返回类型 举个 Node.js 代码例子说明
const fs require(fs);// 字节流默认读取到 Buffer
const stream1 fs.createReadStream(file.txt);
stream1.on(data, chunk {console.log(Buffer.isBuffer(chunk)); // true收到的是 Buffer二进制
});// 字符流设置编码读取到字符串
const stream2 fs.createReadStream(file.txt, { encoding: utf8 });
stream2.on(data, chunk {console.log(typeof chunk); // string收到的是字符串
});总结 Node.js 流是统一的“字节流”数据默认是 Buffer 类型的二进制。 通过给流设置 encodingNode.js 会自动将字节流转换成字符串达到类似 Java 字符流的效果。 Java 是在类结构上区分字符流和字节流Node.js 是靠参数和 Buffer 来决定处理方式。
如果你做文件操作想“像用字符流一样”处理文本就用带编码的流如果要处理二进制数据就用默认的 Buffer 流。 你想了解 Node.js 里跟文件读取以及文件操作相关的常见函数尤其是跟“读取read”、“读文件readFile”、“创建create”、“流stream”有关的。顺便帮你补充一些常用但你没说的相关函数。
我帮你把 Node.js 文件系统fs模块相关常用方法做个全面的梳理和举例。 Node.js 文件读写相关函数大全
1. fs.readFile() 和 fs.readFileSync() 作用一次性读取整个文件内容异步和同步版本 示例
const fs require(fs);// 异步读文件
fs.readFile(example.txt, utf8, (err, data) {if (err) throw err;console.log(异步读文件内容:, data);
});// 同步读文件
const content fs.readFileSync(example.txt, utf8);
console.log(同步读文件内容:, content);2. fs.read() 作用读取文件的部分内容基于文件描述符低级 API 需要先打开文件得到文件描述符fd 示例
const fs require(fs);fs.open(example.txt, r, (err, fd) {if (err) throw err;const buffer Buffer.alloc(10); // 读取10字节fs.read(fd, buffer, 0, 10, 0, (err, bytesRead, buf) {if (err) throw err;console.log(读取字节数:, bytesRead);console.log(读取内容:, buf.toString(utf8, 0, bytesRead));fs.close(fd, (err) {if (err) throw err;});});
});3. fs.createReadStream() 作用创建一个可读流适合大文件或流式处理 示例
const fs require(fs);const readStream fs.createReadStream(example.txt, { encoding: utf8, highWaterMark: 16 * 1024 });readStream.on(data, (chunk) {console.log(读取到数据块:, chunk);
});readStream.on(end, () {console.log(读取完毕);
});readStream.on(error, (err) {console.error(读取错误:, err);
});4. fs.open() / fs.close() 作用打开文件返回文件描述符fd用于更底层操作操作结束后关闭文件 示例
fs.open(example.txt, r, (err, fd) {if (err) throw err;console.log(文件描述符:, fd);fs.close(fd, (err) {if (err) throw err;console.log(文件已关闭);});
});5. fs.readSync() 同步版本的 fs.read()基于 fd 读文件部分内容 示例
const fd fs.openSync(example.txt, r);
const buffer Buffer.alloc(10);
const bytesRead fs.readSync(fd, buffer, 0, 10, 0);
console.log(buffer.toString(utf8, 0, bytesRead));
fs.closeSync(fd);6. fs.readv() / fs.readvSync()Node.js 12 作用一次读取多个 buffer分散读 相对较少用进阶用法 7. 其它相关的文件读取与创建函数
函数说明同步/异步fs.writeFile() / fs.writeFileSync()写文件覆盖写异步/同步fs.appendFile() / fs.appendFileSync()追加写文件异步/同步fs.createWriteStream()创建写流适合大文件或流式写入fs.exists() / fs.existsSync()判断文件是否存在不推荐建议用 fs.stat异步/同步fs.stat() / fs.statSync()获取文件信息大小、时间等异步/同步fs.readdir() / fs.readdirSync()读取目录下文件列表异步/同步 8. 结合 stream 读取文件示例
const fs require(fs);
const { pipeline } require(stream);const readStream fs.createReadStream(example.txt, { encoding: utf8 });
readStream.on(data, (chunk) {console.log(读取块:, chunk);
});
readStream.on(end, () {console.log(读完了);
});9. readline 模块按行读取大文件
const fs require(fs);
const readline require(readline);const rl readline.createInterface({input: fs.createReadStream(example.txt),crlfDelay: Infinity
});rl.on(line, (line) {console.log(一行: ${line});
});rl.on(close, () {console.log(文件读取结束);
});总结 简单快速读小文件用 fs.readFile() 或同步版本 **读文件片段低级**用 fs.read() fs.open() 大文件流式读用 fs.createReadStream() 按行读可以结合 readline 模块 底层操作使用 fs.open()、fs.read()、fs.close() 如果你想我还可以帮你整理写文件相关的函数用法或者把流式读写结合的完整例子也给你告诉我哈