1.Buffer缓冲器
1.Buffer是什么?
- 1.它是一个类似于数组的对象,用于存储数据(存储的是二进制数据)。
- 2.Buffer的效率很高,存储和读取很快,直接对计算机的内存进行操作。
- 3.Buffer的大小一旦确定了,不可修改。
- 4.每个元素占用内存的大小为1字节。
- 5.Buffer是Node中的非常核心的模块,无需下载、无需引入即可使用
2.进制:
- 十六进制:00 ----- ff
- 十进制: 00 ----- 255
- 二进制: 00000000 ------- 11111111
3.换算
- 8 bit(位) = 1 byte(字节)
- 1024byte = 1KB
- 1024Kb = 1MB
- 1024Mb = 1Gb
- 1024GB = 1TB
- 1024TB = 1PB
//1.将一个字符串存入Buffer中
let str = 'HELLO WORLD'
let buf = Buffer.from(str)
console.log(buf) //<Buffer 48 45 4c 4c 4f>
//2.alloc这种方式去创建Buffer实例---效率一般
let buf2 = Buffer.alloc(10)
console.log(buf2) //<Buffer 00 00 00 00 00 00 00 00 00 00> 00占位代表(空内存)
//3.allocUnsafe这种方式去创建Buffer实例---效率很好,但是存在一些安全问题
let buf3 = Buffer.allocUnsafe(10)
console.log(buf3) //<Buffer 0e 00 00 00 06 02 00 00 06 00> 使用没有被引用的内存,可能残留一些信息
//4.使用new关键字创建一个Buffer实例(即将被弃用)-----效率很低
let buf4 = new Buffer(10)
console.log(buf4) // <Buffer 00 00 00 00 00 00 00 00 00 00>
2.Node中的文件操作(写入)
Node中的文件系统:
- 在NodeJs中有一个文件系统,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。
- 在NodeJs中,给我们提供了一个模块,叫做fs模块,专门用户操作文件。
- fs模块是Node的核心模块,使用的时候,要引入进来,不用下载安装。
简单文件写入(异步):
fs.writeFile(file, data[, options], callback)
--file:文件路径+文件名
--data:要写入的数据
--options:配置选项(可选参数)
--flag:打开文件要进行的操作,默认是w
'w':直接写入
'a':追加
--mode:文件权限的限制,默认值是0o666
--0o111:文件可被执行
--0o222:文件可被写入
--0o444:文件可被读取
--encoding:默认值utf8
--callback:回调函数
--err
备注:在Node中有一个设计原则:错误优先。
不足之处:简单文件写入是一次性把所有要写入的数据加载到内存中,对于比较大的文件容易产生内存溢出,适用于较小的文件写入。
//1.引入fs模块
let fs = require('fs')
//2.进行简单文件写入
fs.writeFile('./720.txt','哈哈',{
flag:'w',
mode:0o666,
encoding:'utf8'
},(err)=>{
if(!err){
console.log('文件写入成功了!')
}else{
console.log(err)
}
})
流式文件写入:
fs.createWriteStream(path[, options])
--path:文件路径+文件名
--options:配置对象(可选)
--flags:打开文件要进行的操作,默认是w
'w':直接写入
'a':追加
--mode:文件权限的限制,默认值是0o666
--0o111:文件可被执行
--0o222:文件可被写入
--0o444:文件可被读取
--encoding:默认值utf8
--fd:文件的唯一标识。(了解)
--autoClose:自动关闭,当数据操作完毕,自动关闭文件,默认是true
--start:文件写入的起始位置
//1.引入fs模块
let fs = require('fs')
//2.创建一个可写流
let ws = fs.createWriteStream('./demo.txt',{
start:20
})
//只要使用了流,必须给流加监听
ws.on('open',()=>{
console.log('可写流打开了')
})
ws.on('close',()=>{
console.log('可写流关闭了')
})
//3.开始写入数据
ws.write('马上晚上放学了\n')
ws.write('我饿了\n')
ws.write('饿了你就忍着吧\n')
ws.close() //如果用的是Node的8版本一下(包含8版本),用此种方式关闭流,容易造成数据丢失。
//ws.end()
3.Node中的文件操作(读取)
简单文件读取:
fs.readFile(path[, options], callback)
--path:文件路径+文件名
--options:配置对象
--encoding:文件编码
--flag:打开文件要进行的操作
--callback:回调函数
--err:错误对象
--data:数据
//1.引入fs模块
let fs = require('fs')
//2.简单文件读取
fs.readFile('./music.mp3',(err,data)=>{
if(!err){
//思考?为什么读取出来的是Buffer类型(看不懂),因为读取出来的数据不一定是文本,可能是媒体文件。
//console.log(data.toString())
fs.writeFile('../demo.mp3',data,(err)=>{
if(!err){
console.log('ok')
}else{
console.log(err)
}
})
}else{
console.log(err)
}
})
流式文件读取:
fs.createReadStream(path[, options])
--path:文件路径+文件名
--options:配置对象(可选)
--flags:打开文件要进行的操作,默认是w
'w':直接写入
'a':追加
--mode:文件权限的限制,默认值是0o666
--0o111:文件可被执行
--0o222:文件可被写入
--0o444:文件可被读取
--encoding:默认值utf8
--start:读取的起始点
--end:读取的结束点
--highWaterMark:每次读取数据的大小 默认值是:64 * 1024
//1.引入fs模块
let fs = require('fs')
//2.创建一个可读流,对于可读流来说,当没有数据可继续读取的时候,会自动关闭可读流。
let rs = fs.createReadStream('./music.mp3',{
//start:2000,
//end:90000,
highWaterMark:1024 * 1024
})
let ws = fs.createWriteStream('../demo.mp3')
//使用了流,必须给流加监听(为了确保每个流都能够在使用完毕后关闭)
rs.on('open',()=>{
console.log('可读流打开了')
})
rs.on('close',()=>{
console.log('可读流关闭了')
ws.close()
})
ws.on('open',()=>{
console.log('可写流打开了')
})
ws.on('close',()=>{
console.log('可写流关闭了')
})
//3.给可读流绑定一个data事件,会自动触发流读取文件
rs.on('data',(data)=>{
//输出Buffer实例的length的时候,输出的不是长度,输出的是占用内存的大小
//console.log(data.length)
ws.write(data)
})
关于环境变量的说明
什么是环境变量?
- 定义:是系统执行命令时候会读取的变量
- 分为两种:系统环境变量、用户环境变量
- 配置方法:我的电脑 -> 高级系统设置 -> 环境变量 ->用户环境变量
- 配置原则:优先修改用户环境变量,如不能完成目的,再修改系统环境变量。