node.js—buffer缓冲模块

Buffer对象

  • 0.准备知识

    • 0.1计算机只能识别0和1(因为计算机只认识通电和断电两种状态),
    • 0.2所有存储在计算机上的数据都是0和1组成的(数据越大0和1就越多)
    • 0.3计算机中的度量单位
      • 1 B(Byte字节) = 8 bit(位)
      • 00000000 就是一个字节
      • 111111111 也是一个字节
      • 10101010 也是一个字节
      • 任意8个 0或1的组合都是一个字节
      • 1 KB = 1024 B
      • 1 MB = 1024KB
      • 1 GB = 1024MB
  • 1.什么是Buffer?

    • Buffer是NodeJS全局对象上的一个类,是一个专门用于存储字节数据的类
    • NodeJS提供了操作计算机底层API,而计算机底层只能识别0和1,所以就提供了一个专门用于存储字节数据的类
  • 2.如何创建一个Buffer对象

    • 2.1创建一个指定大小的Buffer
      • 格式Buffer.alloc(size[, fill[, encoding]])
        • 示例:Buffer.alloc(5)
    • 2.2根据数组/字符串创建一个Buffer对象
      • 格式Buffer.from(string[, encoding])
        • 示例:Buffer.from('abc')
  • 3.Buffer对象本质

    • 本质就是一个数组
Buffer实例方法
  • 1.将二进制数据转换成字符串

    • 格式:buf.toString([encoding[, start[, end]]])
      • encoding: 要使用的字符编码,默认值: 'utf8'。
      • start: 开始解码的字节偏移量,默认值: 0。
      • end: 停止解码的字节偏移量(不包括),默认值: buf.length。
      • 示例:buf.toString()
  • 2.往Buffer中写入数据

    • 格式:buf.write(string[, offset[, length]][, encoding])
      • string: 要写入 buf 的字符串。
      • offset: 开始写入 string 之前要跳过的字节数,默认值: 0。
      • length: 要写入的字节数,默认值: buf.length - offset
      • encoding: string的字符编码,默认值: 'utf8'。
      • 示例:
let buff = Buffer.alloc(5);
buff.write('abcdef');
console.log(buff.toString());  // abcde
  • 3.从指定位置截取新Buffer
    • 格式:buf.slice([start[, end]])
      • start: 新Buffer开始的位置。默认值: 0。
      • end: 新Buffer结束的位置(不包含)
let buff = Buffer.alloc(5);
buff.write('abcdef');
console.log(buff.toString().slice(2,4));  // cd
Buffer静态方法
  • 1.检查是否支持某种编码格式
    • Buffer.isEncoding(encoding)
let buff = Buffer.isEncoding('utf-8');
console.log(buff);   // true
  • 2.检查是否是Buffer类型对象
    • Buffer.isBuffer(obj)
// let obj = {};  // 这么写是false
let obj = Buffer.alloc(5);  // 输出是true
let buff = Buffer.isBuffer(obj);
console.log(buff);
  • 3.获取Buffer实际字节长度
    • Buffer.byteLength(string[, encoding])
    • ==注意点==: 一个汉字占用三个字节
let buff1 = Buffer.from('abc');
let buff2 = Buffer.from('微双');
console.log(buff1.length);   // 3
console.log(buff2.length);   // 6
  • 4.合并Buffer中的数据
    • Buffer.concat(list[, totalLength])
let buff1 = Buffer.from('abc');
let buff2 = Buffer.from('123');
let res = Buffer.concat([buff1,buff2]);
console.log(res.toString());  // abc123

路径Path

  • 1.路径模块(path)

    • 封装了各种路径相关的操作,和Buffer一样,NodeJS中的路径也是一个特殊的模块
    • 不同的是Buffer模块已经添加到Global上了, 所以不需要手动导入
    • 而Path模块没有添加到Global上,所以使用时需要手动导入
  • 2.获取路径的最后一部分(最后斜杠后面的部分)

    • path.basename(path[, ext])
let path = require('path');
// let res = path.basename('C:\\study\\node\\node\\index.html');  // index.html
// let res = path.basename('C:\\study\\node\\node');  // node
let res = path.basename('C:\\study\\node\\node\\index.html','.html');  //index
console.log(res);
  • 3.获取路径(最后斜杠前面的所有路径)
    • path.dirname(path)
let path = require('path');
// let res = path.dirname('C:\\study\\node\\node\\index.html');  // C:\study\node\node
let res = path.dirname('C:\\study\\node\\node');  // C:\study\node
console.log(res);
  • 4.获取扩展名称(路径末尾的扩展名,若没有则返回空)
    • path.extname(path)
let path = require('path');
// let res = path.extname('C:\\study\\node\\node\\index.html'); // .html
let res = path.extname('C:\\study\\node\\node'); // 空
console.log(res);
  • 5.判断是否是绝对路径
    • path.isAbsolute(path)
    • 注意点(区分操作系统)
      • 在Linux操作系统中 ==/ 开头==就是绝对路径,并且路径的分隔符是 ==左斜杠 /==
      • 在Windows操作系统中 ==盘符开头== 就是绝对路径,并且路径的分隔符是 ==右斜杠\\==
      • 特殊情况,可能是新规定:==示例中,\\开头,没有盘符,依旧是true==
let path = require('path');
// let res = path.isAbsolute('C:\\study\\node\\node\\index.html');  // true
// let res = path.isAbsolute('\\study\\node\\node\\index.html');  // true
let res = path.isAbsolute('study\\node\\node\\index.html');  // false
console.log(res);
  • 6.获取当前操作系统变量路径分隔符
    • path.sep (windows是\ Linux是/)
      • 如果是在Linux操作系统中运行那么获取到的是 左斜杠 /
      • 如果是在Windows操作系统中运行那么获取到的是 右斜杠 \
let path = require('path');
console.log(path.sep);  //  \
  • 7.获取当前路径环境路径分隔符
    • path.delimiter (windows中使用; linux中使用:)
    • 区分操作系统
      - 如果是在Windows操作系统中运行那么获取到的是 ;
      - 如果是在Linux操作系统中运行那么获取到的是 :
let path = require('path');
console.log(path.delimiter);   // ;
  • 1.路径的格式化处理(相互转换)
    • path.parse() string->obj
      • 将路径转换成对象
    • path.format() obj->string
      • 将对象转换成路径
// 1.path.parse()
let path = require('path');
let obj = path.parse('C:\\study\\node\\node\\index.html');
console.log(obj);  /* 输出{
  root: 'C:\\',
  dir: 'C:\\study\\node\\node',
  base: 'index.html',
  ext: '.html',
  name: 'index'
} */

// 2.path.format()
let path = require('path');
let obj = {
    root: 'C:\\',
    dir: 'C:\\study\\node\\node',
    base: 'index.html',
    ext: '.html',
    name: 'index'
};
console.log(path.format(obj));  // C:\study\node\node\index.html
  • 2.拼接路径
    • path.join([...paths])
      • 1.没有斜杠\,该方法会自动添加
      • 2.有斜杠\或者有.\都是前后参数拼接
      • 3.斜杠前面有不止一个点.,那么会自动根据前面的参数生成的路径,去到上一级或上一级以上的路径
let path = require('path');

// let res = path.join('C:\\study\\node','index.html'); // C:\study\node\index.html
// let res = path.join('C:\\study\\node','\\index.html'); // C:\study\node\index.html
// let res = path.join('C:\\study\\node','.\\index.html'); // C:\study\node\index.html
let res = path.join('C:\\study\\node','..\\index.html'); // C:\study\index.html
console.log(res);
  • 3.规范化路径
    • path.normalize(path)
let path = require('path');
let res = path.normalize('C:\\study\\\\node\\node\\\\index.html'); //C:\study\node\node\index.html
console.log(res);
  • 4.计算相对路径
    • 根据第一个路径找到第二个路径的相对路径
    • path.relative(from, to)
let path = require('path');
// let res = path.relative('C:\\study\\node\\node','C:\\study\\node\\index.html');  // ..\index.html
let res = path.relative('C:\\study\\node\\node','C:\\study\\node\\node\\index.html');  // index.html
console.log(res);
  • 5.解析路径
    • path.resolve([...paths])
      • 注意点: ==如果后面的参数是绝对路径, 那么前面的参数就会被忽略==
let path = require('path');
// let res = path.resolve('C:\\study\\node\\node','C:\\study\\node\\index.html');  // C:\study\node\index.html
let res = path.relative('\\study\\node','\\index.html');  // ..\..\index.html
console.log(res);   

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350