1、path.normalize() 方法会规范化给定的 path。
2、path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。
3、path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。
4、path.dirname() 方法返回一个 path 的目录名。
5、path.basename() 方法返回一个 path 的最后一部分。
6、path.extname() 方法返回 path 的扩展名。
7、path.parse() 方法返回一个对象,对象的属性表示 path 的元素。
8、path.format() 方法会从一个对象返回一个路径字符串。
(1)buffer是用于处理二进制数据流的,是个全局变量
(2)buffer实例类似整数数组,大小固定
(3)C++代码在V8堆外分配物理内存
2、几个buffer创建实例
// 创建一个长度为 10、且用 0 填充的 Buffer。 const buf1 = Buffer.alloc(10);结果就是<Buffer 00 00 00 00 00 00 00 00 00 00>
// 创建一个长度为 10、且用 0x1 填充的 Buffer。 const buf2 = Buffer.alloc(10, 1);结果就是<Buffer 01 01 01 01 01 01 01 01 01 01>
// 创建一个长度为 10、且未初始化的 Buffer。 // 这个方法比调用 Buffer.alloc() 更快, // 但返回的 Buffer 实例可能包含旧数据, // 因此需要使用 fill() 或 write() 重写。 const buf3 = Buffer.allocUnsafe(10);结果是随机的十个数
// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。 const buf4 = Buffer.from([1, 2, 3]);结果就是<Buffer 01 02 03>
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。 const buf5 = Buffer.from('tést');结果就是<Buffer 74 65 73 74 >
如果是字符串的方式,后面还能跟第二个参数,可以是base64等,默认是UTF-8。
3、Buffer中常用类的几个API
(1)Buffer.bytelength返回一个字符串的实际字节长度
console.log(Buffer.byteLength('test')) console.log(Buffer.byteLength('哈哈'))结果是4 6,那么意思即一个字母是1个字节,一个汉字是3个字节。
(2)Buffer.isBuffer(obj)判断一个对象是不是Buffer对象,是返回true,否返回false
(3)Buffer.concat(list[,totallength])返回一个一刀999级合并了list中所有Buffer实例的新建的Buffer 。
4、Buffer中常用的实例的方法
(1)buf.length:buf对象的长度
(2)buf.toString():buf对象转化为字符串
(3)buf.fill():填充内容,比如buf.fill(10,2,6)意思即从第2个数到第6个数之间填充10,即3、4、5、6这四个数被填10,十六进制来表示就是0a
(4)buf.equals():比较两个buf的内容是否一样,比如buf1.equals(buf2)
(5)buf.indexOf(string):寻找匹配的值,返回匹配值所在的位置。
(6)buf.copy():拷贝buf的一个区域的数据到target的一个区域,即便target的内存区域与buf的重叠。比如说
5、中文乱码的问题
但出现中文乱码的时候就使用StringDecoder来解决
const StringDecoder=require('string_decoder') const decoder=new StringDecoder('utf8'); ..... console.log(decoder.write(b))(3)事件的移除(https://blog.csdn.net/weixin_37968345/article/details/80775142)
上面的结果就是读取文件自己,当然如果没有toString()方法则就是输出的buffer,也可使用fs.readFile()方法的第二个参数,将第二个参数写为‘utf8,文件也能读取到字符串内容。
2、fs.readFiLeSync(同步操作)
const data=fs.readFileSync('./process.js','utf8') console.log(data)3、fs.writeFile(file ,data[,options],callback): 异步地写入数据到文件,如果文件已经存在,则覆盖文件。流(stream)在 Node.js 中是处理流数据的抽象接口。 stream 模块提供了基础的 API 。使用这些 API 可以很容易地来构建实现流接口的对象。
Node.js 提供了多种流对象。 例如 HTTP请求和 process.stdout 都是流的实例。
流可以是可读的、可写的、或是可读写的。 所有的流都是 EventEmitter 的实例。
stream 模块可以通过以下方式引入:
const stream = require('stream');尽管理解流的工作方式很重要,但是 stream 模块本身主要用于开发者创建新类型的流实例。 对于大多数以消费流对象为主的开发者来说,极少需要直接使用 stream 模块。
const fs=require('fs') const rs=fs.createReadStream('./process.js') rs.pipe(process.stdout)上面的代码创建一个可读流,源头是process.js文件,流输出是终端,对于流的概念很关键,和刚才的fs.readFile并不一样,readFile是一次性读完显示,流是读一点显示一点,就像网页卡的时候都是从上到下一点点的显示。
const fs=require('fs') const ws=fs.createWriteStream('./text.txt') //向text.txt文件写入 const tid=setInterval(()=>{ const num=parseInt(Math.random()*10);// 随机生成10以内的整数 console.log(num); if(num<9){ ws.write(num+'') //使用steam,要么write字符串,要么write一个buffer,不能是数字 }else{ ws.end();clearInterval(tid)//关闭定时器 } },300) ws.on('finish',()=>{ console.log('done') })上面的代码就是使用流的方式就随机小于9的整数写入text文本中