Node.js学习笔记(六)

Buffer

Buffer是一个存储二进制的数组,数组的每一项对应一个字节的大小;

const buffer3 = Buffer.from("牛皮的JavaScript");
console.log(buffer3);
// <Buffer e7 89 9b e7 9a ae e7 9a 84 4a 61 76 61 53 63 72 69 70 74>
const str = buffer3.toString();
console.log(str);
//牛皮的JavaScript

Buffer的其他用

Buffer的创建方式

 Buffer与文件读取

读取文本文件

const fs = require('fs');
fs.readFile('./test.txt', (err, data) => {
    console.log(data); //<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64><Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64>
    console.log(data.toString());// Hello World
});

 Stream

何为Stream

程序中的流可以假想,当我们从某一个文件读取数据时,文件的二进制数据会源源不断的被读取到我们的程序中;而这个一连串的字节,就是我们程序中的流

则流----是连续字节的一种表现形式和抽象概念,流是可读、可写的。

对比前面学过的可以直接使用readFile或者writeFile的方式来读写文件,流有以下特点

①直接读写的方式简单,但是有一些无法控制的细节的操作

②从什么位置开始读,读到什么位置、一次性读多少字节,都是直接读写的缺点

③读到某个位置后,暂停读取,某个时刻恢复读取。

④文件非常大,如一个视频文件,一次性全部读取并不合适。

流的分类

Writable:可以向其写入数据的流---fs.createWriteStream();

Readable:可以从中读取数据的流---fs.createReadStream(();

Duplex:同时为Readable和Writable的流---net.Socket;

Transform:Duplex可以在写入和读取数据时修改或转换数据的流---zlib.createDeflate();

Readable

const read = fs.createReadStream("./foo.txt", {  start: 3,  end: 8,  highWaterMark: 4});

stat:文件读取开始的位置;

end:文件读取结束的位置;

highWaterMark:一次性读取字节的长度,默认为 64KB;

监听文件的读取与关闭

read.on('open', (fd) => {  console.log("文件被打开");})read.on('end', () => {  console.log("文件读取结束");})read.on('close', () => {  console.log("文件被关闭");})

在某一个时刻暂停与恢复读取

read.on("data", (data) => {  console.log(data);  read.pause();  setTimeout(() => {    read.resume();  }, 2000);});

 Writable

我们可以使用createWriteStream来实现文件的写入

const writer = fs.createWriteStream("./foo.txt", {
  flags: "a+",
  start: 8
});

writer.write("你好啊", err => {
  console.log("写入成功");
});

flags:默认是w,如果希望是追加写入,可以使用a 或者a+;

start:写入的位置;

 监听事件
writer.on("open", () => {
  console.log("文件打开");
})

writer.on("finish", () => {
  console.log("文件写入结束");
})

writer.on("close", () => {
  console.log("文件关闭");
})

end方法

end方法相当于做了两步操作:write传入的数据和调用close方法 

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值