美文网首页
nodejs入门总结五:buffer模块,fs模块

nodejs入门总结五:buffer模块,fs模块

作者: 牛妈代代 | 来源:发表于2023-10-13 21:16 被阅读0次

    buffer缓冲区类

    为什么使用buffer?
    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。原始数据存储在 Buffer 类的实例中。

    创建缓存:
    const buf=Buffer.from(arrayBuffer[, byteOffset[, length]]); //Buffer.from(string[, encoding])
    const buf=Buffer.alloc(); //会被使用零进行初始化
    const buf=Buffer.allocUnsafe();//不会被初始化,可能含有敏感信息

    (1)创建:from(),alloc(),allocUnsafe()不被初始化,可能包含敏感信息 ,allocUnsafeSlow(),
    (2)write(string,offset[,length],encoding)写入,如果空间不够,写入人部分,返回写入代字节数;
    (3)toString(encoding,start,end])字符串读取;
    (4)toJSON():转json
    (5)concat()缓存区合并
    (6)copu()拷贝缓冲区
    (7)slice()剪切缓冲区
    (8)lenght()长度
    (9)buf[0]获取buf,获取 Unicode 码,用于标识 buffer 位置中的字符

    备注:
    Buffer对内存的权限操作相比很大,可以直接捕获一些敏感信息,所以在v6.0以后,官方文档里面建议使用 Buffer.from() 接口去创建Buffer对象。
    Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
    V8 JavaScript 引擎外部分配的固定大小的内存块(无法调整大小)。
    Buffer 与流紧密相连。 当流处理器接收数据的速度快于其消化的速度时,则会将数据放入 buffer 中。

    fs文件模块

    Node的炒作文件,文件夹模块,同一种方法都有异步,同步;还提供了流传播;

    常用方法

    1.文件夹操作:

    fs.mkdir(./newdi,callback)|fs.mkdirSync(./newdi): 创建文件夹
    fs.rmdir(path) | fs.rmdirSync():删除文件夹
    fs.rename ( oldpath , newpath, callBack )|fs.renameSync()
    fs.readdir(path,callback) | fs.readdirSync():读取文件夹

    2.文件操作

    增,删,改,查
    fs.appendFileSync(path, data, options)|fs.appendfile( path , data , fn):新增文件,生成文件的路径。 如果文件存在则在原有的内容之后追加内容,

    fs.unlink( path , callback ):删除文件
    fs.rename ( oldpath , newpath, callBack ):修改文件名, 此功能可以修改文件名,剪切文件,修改文件夹名,简介文件夹;

    writeFileSync(path,data) | fs.writeFile(path, content, objFlag, callback):只会存入最后一条信息; //flag控制写入模式,
    appendFileSync(path,dat)|appendFile(path,dat):在文件后面追加内容;

    fs.readFileSync(FileName) | fs.readFile('/Users/joe/test.txt', 'utf8' , (err, data) => {})//读取
    r+ 打开文件用于读写。
    w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。
    a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。
    a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件。

    同步读取文件,都会在返回数据之前将文件的全部内容读取到内存中。会消耗内存;更好的选择是使用流来读取文件的内容。返回代是buffer,需要使用tosting()转化一下

    fs常用方法
    fs.open(path,'r',(err,fd)=>{}):获取文件,第一个参数为路径,第二个为打开模式,第三个为回掉,fd为文件描述
    Fs.write()
    Fs.read()
    Fs.colse()
    fs.stat(path,(err,stats)=>{}):获取文件属性,常用isFile(),isDirectory(),size等
    fs.access() 检查文件夹是否存在以及 Node.js 是否具有访问权限。
    fs-extra 模块,fs模块的升级;

    文件描述符
    (1)fs.open('/Users/joe/test.txt', 'r', (err, fd) => { //fd 是文件描述符。})函数第二个入参威描述符,文件描述在回掉函数中返回,
    (2)const fd = fs.openSync('/Users/joe/test.txt', 'r'); //fd为返回d文件描述;
    一旦获得文件描述符,就可以以任何方式执行所有需要它的操作;怎么添加文件描述,我还没弄明白;

    stream(流)

    高效的方式处理读/写文件、网络通信、或任何类型的端到端的信息交换。
    在传统的方式中,当告诉程序读取文件时,这会将文件从头到尾读入内存,然后进行处理。使用流,则可以逐个片段地读取并处理(而无需全部保存在内存中)。

    流的优点
    (1)内存效率: 无需加载大量的数据到内存中即可进行处理。
    (2)时间效率: 当获得数据之后即可立即开始处理数据,这样所需的时间更少,而不必等到整个数据有效负载可用才开始。

    流分为四类:
    (1)Readable: 可以通过管道读取、但不能通过管道写入的流 当推送数据到可读流中时,会对其进行缓冲,直到使用者开始读取数据为止。
    (2)Writable: 可以通过管道写入、但不能通过管道读取的流。
    (3)Duplex: 可以通过管道写入和读取的流,基本上相对于是可读流和可写流的组合。
    (4)Transform: 类似于双工流、但其输出是其输入的转换的转换流。

    stream常用事件:data-数据,end-读取完毕,error-错误是触发,finish-写入完毕;
    (5)管道流pipe;是流的一个方法,快速实现文件读取;
    (6)链式流,是通过管道流建立的链式调用;

    相关文章

      网友评论

          本文标题:nodejs入门总结五:buffer模块,fs模块

          本文链接:https://www.haomeiwen.com/subject/tszpsrtx.html