Node的Buffer对象和fs模块

2023-11-11

一、Node的模块化管理

1、模块化:node应用程序由模块组成。遵循的是CommonJS模块规范。使用模块管理的好处是隔离模块的作用域,避免出现命名冲突。

2、什么是CommonJS:是一套代码的规范,构建一个在浏览器之外的JavaScript语言的生态系统。

3、CommonJS规范的主要内容:

(1)通过module.exports导出对外的变量或接口

(2)通过require将其他模块导入到当前模块的作用域中

4、CommonJS的特点:

(1)所有模块都运行在当前模块的作用域中,不会污染全局作用域

(2)模块是同步加载,根据文件中模块出现的顺序依次加载

(3)模块可以多次加载,但只有在第一次加载时运行,其他的加载会放入缓存中,后面再使用时直接从缓存中读取

二、Node的Module对象

1、在node内部定义了一个Module构造函数,构造函数的属性有:

(1)id:表示模块的标识符

(2)parent:表示调用模块的模块

(3)exports:表示导出的值

(4)paths:表示模块(第三方模块)的查找路径。当前目录的node_modules —>父目录的node_modules—->…..—>根目录下的node_modules

(5)path:当前模块所在的路径

(6)filename:当前模块所在的文件名

强调:在CommonJS规范中所有的模块都是Module的实例(对象)

2、exports变量:该变量指向module.exports,作用是方便用户的操作

强调:不能直接给exports赋一个值,这样就切断了exports与module.exports之间的连续。不能进行导出了

三、require命令:是node的内置命令,主要用于加载模块文件

1、作用:导入并运行JavaScript文件,返回的是exports对象

2、加载规则:

(1)加载文件的默认后缀名是:.js

(2)如果参数字符串以’/‘开头,表示加载的文件是位于绝对路径下的文件

(3)如果参数字符串以’./‘开头,表示加载的文件是位于相对路径下的文件

(4)如果参数字符串不以“./“或”/“开头,则表示加载的是一个默认提供的核心模块(位于Node的系统安装目录中),或者一个位于各级node_modules目录的已安装模块(全局安装或局部安装)。

四、Buffer对象

1、作用:是Node提供的处理二进制数据的对象。是node的内置对象,在使用时不需要安装可以直接使用,不需要require(‘buffer’)

2、使用的原因:JavaScript处理字符串的功能非常强大,但在二进制数据处理方面能力很弱。因此node就内置了Buffer对象专门处理二进制数据。Buffer是构造函数,可以使用new创建Buffer的对象,浏览器的v8引擎会为Buffer的对象分配内存空间,类似于数组。

let buf = new Buffer(259) //256表示buf有259个单元,类似于数组,下标的范围在0~258之间
console.log(buf)
//强调:buf的每个单元存放的数据必须是0~255之间的整数值。即Buffer的每个单元就是一个字节
Byte:字节
1024Byte ==> 1KB
1024KB ==> 1MB
1024MB ==> 1GB
1024GB ==> 1TB

3、Buffer对象可以和字符串进行互换

五、Buffer构造函数

1、给构造函数传递整数:表示分配多少个字节的存储空间

let bytes = new Buffer(5) //表示给bytes分配5个字节的存储空间

2、给构造函数传递数组:数组的成员必须是整数值

let bytes = new Buffer([0x10,0x48]) //将数组传递给Buffer构造函数

3、给构造函数传递字符串:默认的编码格式是utf8

let b1 = new Buffer("蜗牛学苑",'utf8')
console.log(b1.toString())

六、Buffer常用的函数

1、Buffer.isEncoding(字符集):参数’字符集’就是字符的编码格式(ASCII、utf8、base64)。作用是判断Buffer的字符集是否是给定的字符集,如果是函数返回true,不是函数返回false

2、Buffer.isBuffer( buffer ):参数是一个Buffer的对象,判断参数是否是一个Buffer的实例

3、Buffer.byteLength( buffer ):返回字符串实际占有字节长度

七、实例属性

1、length:表示Buffer对象的长度(单元个数)

八、实例方法:用对象名调用的方法

1、类的成员:

(1)实例成员:

(2)类成员:静态成员。是通过类名直接访问,不属于某个具体的对象,而为类的所有对象共享的

class Student{
    constructor(id,name){
        Student.school = '蜗牛学苑'  //school是类成员(静态成员)
        this.id = id
        this.name = name
    }
    Student.setSchool = function(){  //类方法
    }
    show(){  //实例方法
    }
}
let s1 = new Student(1,'A') //s1有自己的id和name
let s2 = new Student(2,'B')

2、Buffer的实例方法

(1)write(value,index):向Buffer对象中写入数据

参数value:表示写入的值

参数index:表示写入的位置。可以省略

使用Buffer时注意的问题:在创建Buffer对象时,node建议使用以下两个方法,而不建议使用new

(1)Buffer.alloc(number,fill,encoding),返回一个Buffer对象

参数number:必须是整数,代表buffer的单元个数

参数fill:表示填充数据。默认值为0

参数encoding:若填充数据是字符串,用来指定字符集(编码格式),默认值是utf8

(2)Buffer.from(args1,args2),返回一个Buffer对象

参数args1:可以是字符串,也可以是数组

参数args2:若第一个参数是字符串,则用来指定字符集

let b2 = Buffer.from([0x41,0x42,0x71])  //数组作为参数
console.log(b2.toString())
let b2 = Buffer.from('蜗牛学苑','utf8') //字符串作为参数
console.log(b2.toString())

九、Node的文件操作:对文件的I/O操作使用的是fs(FileSystem)模块

I/O操作是输入/输出操作(I表示Input,O表示Output)

1、使用方法:使用require导入

var fs = require('fs')

2、读文件

(1)异步读文件 —- 非阻塞方式的读

readFile(filename,callback)

参数filename:表示文件的全名

参数callback:回调函数。读文件结束后执行该函数

//导入fs模块
var fs = require('fs')
//调用异步读文件的方法
 fs.readFile('input.txt',function(err,data){ 
//err存放的是读文件出现错误的信息,data存放的是读取的文件内容
     if(err){
         return console.error(err)
     }
     console.log('文件内容是:',data.toString())
 })

(2)同步读文件 —- 阻塞方式的读

readFileSync(filename,encoding),函数的返回值就是读取的文件内容

参数filename:表示文件的全名

参数encoding:表示字符集

//导入fs模块
var fs = require('fs')
//同步读文件
let data = fs.readFileSync('input.txt')
console.log('文件内容是:',data.toString())
console.log('程序结束......')

3、打开文件

open(path, flags[, mode], callback)

path:要打开的文件路径

flags:打开文件的方式

r:以只读的方式打开文件。若文件不存在则报错

r+:打开文件后可以读、写。若文件不存在则报错

w:以写入的方式打开文件。若打开的文件不存在,则创建文件

w+:打开文件进行读和写。若打开的文件不存在,则创建文件

a:打开文件进行追加(在文件原有内容的末尾追加新内容)。若打开的文件不存在,则创建文件

fs.open(‘input1.txt’,’w’,function(err,fd){
if(err){
return console.log(err)
}
console.log(‘文件打开成功!’,fd)
})
console.log(‘程序结束……’)

4、区分文件和目录

stat(path, callback)

path:路径名

callback:回调函数

fs.stat('node_modules',function(err,stats){
 //err表示打开文件发生错误时的信息,stats表示文件的状态信息
    if(err){
        return  console.log(err)   
    }
   console.log('是目录?',stats.isDirectory())  //判断stats是否是目录
   console.log('是文件?',stats.isFile()) //判断stats是否是文件
})

5、写文件:向文件中写入内容

(1)writeFile(filename, data[, options], callback) —- 异步写。若文件存在则覆盖

fs.writeFile('input.txt','天冷了',function(err){
    if(err){
        return console.log(er)
    }
    console.log('文件写入成功!')
})
console.log('主程序结束......')

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node的Buffer对象和fs模块 的相关文章

随机推荐

  • Springboot项目Aop、拦截器、过滤器横向对比

    前言 伟人曾经说过 没有调查就没有发言权 好像是伟人说的 不管谁说的 这句话是正确的 有些东西看着简单 张口就来 但很有可能是错的 我个人的经验是 aop 过滤器 拦截器的实现方式很简单 一学就会 不用就忘 忘了再学 学了再忘 如此循环内耗
  • springboot整合请求分析

    文章目录 请求 初识restTemplate GET请求 1 传参替换使用 来表示坑位 根据实际的传参顺序来填充 如下 2 使用 xx 来传递参数时 这个xx对应的就是map中的key 3 当响应头是application json cha
  • 计算机单位及单位转换

    计算机单位及转换 一 位 计算机中表示信息的最小单位 表示一位二进制信息 以b表示 bit 0 1 一个字节8位 字节 计算机中处理信息的最小单位 以八位二进制信息 以B表示 1B 8b 一个整数4个字节 字长 一个字所包含二进制输的位数
  • 刷脸支付逐渐普及刷脸项目也逐渐火热起来

    科技的发展总是朝着更智能化的方向前进 在此基础上 人脸识别技术因其生物支付特征明显 和特征唯一性获得了众多项目的青睐 将这一技术迅速线下落地产业化 随着人脸识别技术的逐渐成熟 刷脸支付应运而生 刷脸支付代理项目也逐渐火热起来 我们体验了刷脸
  • 认识 MySQL

    文章目录 1 前言 2 数据库 3 MySQL 1 前言 在当今信息时代 数据被认为是最宝贵的资源之一 因为它可以帮助我们洞察趋势 做出决策 构建智能系统 并推动创新 而数据库技术的崛起 尤其是MySQL数据库 为我们提供了强大的工具来存储
  • vue中实现删除校验-iview的气泡提示

    前言 很多时候我们担心删除会出现误删的情况 这样就需要对删除进行二次校验 确定是否继续删除 效果图 实现代码
  • Type Incompatible operand types String and int

    今天eclipse包了一个错误 意思就是Description Resource Path Location Type Incompatible operand types String an 但是昨天还没有错误为什么那 最后找了好久发现不
  • 区块链之PBFT算法

    在公有链中用的最多的是pow算法和pos算法 这些算法都是参与者的利益直接相关 通过利益来制约节点诚实的工作 解决分布式系统中的拜占庭问题 拜占庭容错算法是一种状态机副本复制算法 通过节点间的多轮消息传递 网络内的所有诚实节点就可以达成一致
  • jQuery实现省市二级联动

    主要实现流程 步骤分析 1 设置加载页面函数事件 2 在里面获取select的id并且设置下拉事件并且绑定函数 3 定义2维数组存放相应的城市 4 遍历2维数组省份 并且使用if判断 点击时的this value值 如果值与省份 二位数组下
  • 深入理解 == 与 equals 区别

    深入理解 与 equals 区别 这是一个老生常谈的问题了 也是在面试过程中常见的问题之一 网上所提供的常用回答是 equals比较值 比较值和引用 对java源码有了一定了解了之后回头再思考这个问题并不是那么的简单单一 java中的二元运
  • springboot的配置注入

    文章目录 第一种 使用 Value 第二种 使用 ConfigurationProperties springboot配置注入 数据绑定 有两种方式 第一种 使用 Value 首先 在application yml中定义自己的数据 appl
  • 蓝桥杯基础试题汇总(Python)看这一篇就够了

    目录 蓝桥杯习题汇总 1 试题 基础练习 A B问题 2 数列问题 3 试题 基础练习 十六进制转八进制 4 试题 基础练习 十六进制转十进制 5 试题 基础练习 十进制转十六进制 6 试题 基础练习 序列求和 7 试题 基础练习 圆的面积
  • 浅谈数据同步实现rsync+inotify

    浅谈数据同步实现rsync inotify 数据的实时同步介绍 数据的实时同步实现 inotify inotify的介绍 实现inotify软件 inotify rsync使用方式 实现inotify rsync 1 rsync基本概述 2
  • ubuntu安装deb包

    ubuntu安装deb包 安装deb包 sudo dpkg i 包名 安装deb包后 可能会出现依赖关系而不能正常安装软件 这个时候先更新下源然后解决依赖关系后重装即可 sudo apt get update 更新 sudo apt get
  • 教程网站 汇总:Linux 、 C /C++ 、HTML、CSS

    C 语言教程 菜鸟教程 https www runoob com cprogramming c tutorial html C 教程 菜鸟教程 https www runoob com cplusplus cpp tutorial html
  • 安装apache后无法访问localhost但可以访问127.0.0.1的解决方法

    localhost与127 0 0 1的概念和工作原理之不同 概念 localhost 也叫local 正确的解释是 本地服务器 127 0 0 1 在windows等系统的正确解释是 本机地址 本机服务器 工作原理 localhot 是不
  • VS2019的常见错误和调试功能

    目录 一 VS2019常见问题 1 scanf问题 2 如何在当前页面下再创建新项目和创建多项目后无法运行当前项目的问题 二 VS2019的调试功能 不打断点 三 VS2019的调试功能 打断点 四 总结 一 VS2019常见问题 1 sc
  • 爬虫实战爬取豆瓣电影Top250榜单电影

    爬虫实战爬取豆瓣电影Top250榜单电影 实战内容 直接上代码 重要地方有注释 from bs4 import BeautifulSoup import re import urllib request urllib error impor
  • Postman + Pre-resuestScript:预请求脚本发送GET请求

    通过预执行脚本 Pre request Script 发送GET请求 一 效果演示 二 控制台 Console 打印响应结果 代码注释详解 pm sendRequest 是发送一个请求 function 中的 err 表示请求返回的错误信息
  • Node的Buffer对象和fs模块

    一 Node的模块化管理 1 模块化 node应用程序由模块组成 遵循的是CommonJS模块规范 使用模块管理的好处是隔离模块的作用域 避免出现命名冲突 2 什么是CommonJS 是一套代码的规范 构建一个在浏览器之外的JavaScri