Node的Buffer对象和fs模块

2023-11-07

一、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.area = function(r){
    return Math.PI * r**2 
}

强调:不能直接给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是否是目录,若是返回true,若不是返回false
   console.log('是文件?',stats.isFile()) //判断stats是否是文件,若是返回true,不是返回false
})

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模块 的相关文章

随机推荐

  • 云服务器vCPU与物理CPU关系

    CPU个数 看得见摸得找的CPU个数 插在主版上面的 在linux系统下面的 proc cpuinfo文件的条目中 有多少个不同的physical id就有多少个物理CPU CPU物理核 一个CPU可能有多个核 在linux系统下面的 pr
  • Android应用程序资源的查找过程分析

    我们知道 在Android系统中 每一个应用程序一般都会配置很多资源 用来适配不同密度 大小和方向的屏幕 以及适配不同的国家 地区和语言等等 这些资源是在应用程序运行时自动根据设备的当前配置信息进行适配的 这也就是说 给定一个相同的资源ID
  • 京东面试:如何实现分布式锁?

    案例背景 分布式锁是解决协调分布式系统之间 同步访问共享资源的一种方式 详细来讲 在分布式环境下 多个系统在同时操作共享资源 如写数据 时 发起操作的系统通常会通过一种方式去协调其他系统 然后获取访问权限 得到访问权限后才可以写入数据 其他
  • Python使用win32com.client()和load_workbook()追加写入excle

    win32com client 和load workbook 均可以实现在原有excle文件中写入内容 在实际使用中win32com client 使用的方法类似VBA来模拟用户进行操作 运行速度不如load workbook 1 win3
  • 数字锁相环——环路滤波器参数设计

    太难了 好像懂了 又好像没懂 梳理一下 模拟环路滤波器分别有RC积分滤波器 无源比例积分滤波器 有源比例积分滤波器 上图为有源比例积分滤波器 固有频率 n omega n n 和阻尼系数
  • An Introduction to GCC

    对于GCC特别的不熟练 只会google baidu来使用 最近想看看到底gcc如何使用 于是找到了这本书 写的很浅显易懂 而且框架写明白了 真的不错 1 gcc c 是编译的命令 编译与链接是不同的 gcc 不加任何选项时就是编译 链接了
  • VirtualBox安装Ubuntu教程(超详细)

    下载ubuntu系统镜像 准备虚拟机挂载镜像用 选择新建 创建虚拟机 选择系统版本 因为要安装ubuntu 所以选择ubuntu 设置虚拟机ubuntu的内存 创建虚拟机的磁盘 分配20G空间 动态分配是逐渐占用物理机硬盘空间
  • 软件外包公司到底干啥的?要不要去外包公司?

    一 什么是外包 软件外包分为 人力外包和项目外包两个方向 1 劳务派遣 指的是把员工外派到对应的用工企业打 短工 比如很多工程师虽然签约了中软国际 东软 文思海辉 软通动力 润和等软件公司 但实际工作地点是在华为 接受华为员相关负责人的工作
  • Spring系列之缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)

    本文主要详解spring中缓存的使用 背景 缓存大家都有了解过吧 主要用来提升系统查询速度 比如电商中商品详情信息 这些信息通常不会经常变动但是会高频访问 我们可以将这些信息从db中拿出来放在缓存中 比如redis中 本地内存中 当获取的时
  • Idea Maven项目打包工其他项目进行外部引用

    1 说明 我们在日常项目开发中经常会有许多公共的模块 如统一的父工程 工具类模块 中间实体类 DTO VO 如果我们针对每个子项目都单独的创建一套工具类 多个子项目会存在很多重复的工具类 中间实体类代码 因此 我们可以将这些公共模块统一打成
  • 关于STM32串口接收中断中只能接收一个字节()

    最近调试STM32的串口接收时发现例程中只能接收一个字节 例程如下 1 初始化串口1 2 void uart init u32 bound 3 GPIO端口设置 4 GPIO InitTypeDef GPIO InitStructure 5
  • BAPI_ACC_DOCUMENT_POST 简单理解过账BAPI使用,创建会计凭证

    业务场景 创建会计凭证BAPI 甲方是一家从事房屋租赁的公司 它的主营业务就是从各大租户手里收租子 月底了 小明发了工资美滋滋 钱到手没多久房东就催租子了 房租每月100 水电100 税费22 合计222 小明如约在手机APP上向房东支付了
  • Dynamics CRM 2015/2016/365 Web API:批处理任务

    Web API为我们提供的批量任务执行功能 我们可以在一个请求中混合多个不相干的创建查询请求 并且其还提供了事务功能 如果在事务中如果有脚本出现了错误 则其提供回滚功能 如下是批处理的请求报文 在报文里面我们需要设置批处理任务的编号 因为我
  • uniapp各种路由与页面跳转路径

    跳转有长度限制过长的时候用encodeURIComponent pages test test item encodeURIComponent JSON stringify item 1 保留当前B页面 跳转到应用内的某个页面 会计入栈中
  • 【毕业设计】深度学习行人重识别系统 - person reid

    文章目录 0 前言 1 技术背景 2 技术介绍 3 重识别技术实现 3 1 数据集 3 2 Person REID 3 2 1 算法原理 3 2 2 算法流程图 4 实现效果 5 部分代码 6 最后 0 前言 Hi 大家好 这里是丹成学长的
  • css强制换行和禁止换行

    强制换行 word break break all 只对英文起作用 以字母作为换行依据 word wrap break word 只对英文起作用 以单词作为换行依据 white space pre wrap 只对中文起作用 强制换行 禁止换
  • SpringBoot注解+AOP实现

    SpringBoot注解 AOP实现 Java Annotation注解的详解 Java注解是一种元数据 它可以用于在类 方法或其他代码结构中声明关于程序元素的信息和标记 在Java中 注解以 符号开头 在编译时或运行时由Java虚拟机 J
  • TEA、XTEA、XXTEA加密解密算法

    参考 TEA XTEA XXTEA加密解密算法 地址 https blog csdn net gsls200808 article details 48243019 其他相关博文链接 tea系列加密算法学习笔记 TEA和XxTEA跨平台加密
  • 【其他】资源整合

    偶然整理云盘 发现曾经收藏过一些比较不错的资源 正好分享一下 1 C语言教程 郝斌老师作为读书时候的启蒙老师 推荐一波 链接 https pan baidu com s 10NIZ3x4yPP4YP8bYmVENHg 密码 6jj1 2 U
  • Node的Buffer对象和fs模块

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