node.js—buffer緩沖模塊

Buffer對(duì)象

  • 0.準(zhǔn)備知識(shí)

    • 0.1計(jì)算機(jī)只能識(shí)別0和1(因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)通電和斷電兩種狀態(tài)),
    • 0.2所有存儲(chǔ)在計(jì)算機(jī)上的數(shù)據(jù)都是0和1組成的(數(shù)據(jù)越大0和1就越多)
    • 0.3計(jì)算機(jī)中的度量單位
      • 1 B(Byte字節(jié)) = 8 bit(位)
      • 00000000 就是一個(gè)字節(jié)
      • 111111111 也是一個(gè)字節(jié)
      • 10101010 也是一個(gè)字節(jié)
      • 任意8個(gè) 0或1的組合都是一個(gè)字節(jié)
      • 1 KB = 1024 B
      • 1 MB = 1024KB
      • 1 GB = 1024MB
  • 1.什么是Buffer?

    • Buffer是NodeJS全局對(duì)象上的一個(gè)類(lèi),是一個(gè)專(zhuān)門(mén)用于存儲(chǔ)字節(jié)數(shù)據(jù)的類(lèi)
    • NodeJS提供了操作計(jì)算機(jī)底層API,而計(jì)算機(jī)底層只能識(shí)別0和1,所以就提供了一個(gè)專(zhuān)門(mén)用于存儲(chǔ)字節(jié)數(shù)據(jù)的類(lèi)
  • 2.如何創(chuàng)建一個(gè)Buffer對(duì)象

    • 2.1創(chuàng)建一個(gè)指定大小的Buffer
      • 格式Buffer.alloc(size[, fill[, encoding]])
        • 示例:Buffer.alloc(5)
    • 2.2根據(jù)數(shù)組/字符串創(chuàng)建一個(gè)Buffer對(duì)象
      • 格式Buffer.from(string[, encoding])
        • 示例:Buffer.from('abc')
  • 3.Buffer對(duì)象本質(zhì)

    • 本質(zhì)就是一個(gè)數(shù)組
Buffer實(shí)例方法
  • 1.將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成字符串

    • 格式:buf.toString([encoding[, start[, end]]])
      • encoding: 要使用的字符編碼,默認(rèn)值: 'utf8'瑞凑。
      • start: 開(kāi)始解碼的字節(jié)偏移量,默認(rèn)值: 0揭厚。
      • end: 停止解碼的字節(jié)偏移量(不包括),默認(rèn)值: buf.length。
      • 示例:buf.toString()
  • 2.往Buffer中寫(xiě)入數(shù)據(jù)

    • 格式:buf.write(string[, offset[, length]][, encoding])
      • string: 要寫(xiě)入 buf 的字符串形真。
      • offset: 開(kāi)始寫(xiě)入 string 之前要跳過(guò)的字節(jié)數(shù),默認(rèn)值: 0。
      • length: 要寫(xiě)入的字節(jié)數(shù),默認(rèn)值: buf.length - offset
      • encoding: string的字符編碼,默認(rèn)值: 'utf8'唁盏。
      • 示例:
let buff = Buffer.alloc(5);
buff.write('abcdef');
console.log(buff.toString());  // abcde
  • 3.從指定位置截取新Buffer
    • 格式:buf.slice([start[, end]])
      • start: 新Buffer開(kāi)始的位置松申。默認(rèn)值: 0。
      • end: 新Buffer結(jié)束的位置(不包含)
let buff = Buffer.alloc(5);
buff.write('abcdef');
console.log(buff.toString().slice(2,4));  // cd
Buffer靜態(tài)方法
  • 1.檢查是否支持某種編碼格式
    • Buffer.isEncoding(encoding)
let buff = Buffer.isEncoding('utf-8');
console.log(buff);   // true
  • 2.檢查是否是Buffer類(lèi)型對(duì)象
    • Buffer.isBuffer(obj)
// let obj = {};  // 這么寫(xiě)是false
let obj = Buffer.alloc(5);  // 輸出是true
let buff = Buffer.isBuffer(obj);
console.log(buff);
  • 3.獲取Buffer實(shí)際字節(jié)長(zhǎng)度
    • Buffer.byteLength(string[, encoding])
    • ==注意點(diǎn)==: 一個(gè)漢字占用三個(gè)字節(jié)
let buff1 = Buffer.from('abc');
let buff2 = Buffer.from('微雙');
console.log(buff1.length);   // 3
console.log(buff2.length);   // 6
  • 4.合并Buffer中的數(shù)據(jù)
    • 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)

    • 封裝了各種路徑相關(guān)的操作,和Buffer一樣,NodeJS中的路徑也是一個(gè)特殊的模塊
    • 不同的是Buffer模塊已經(jīng)添加到Global上了, 所以不需要手動(dòng)導(dǎo)入
    • 而Path模塊沒(méi)有添加到Global上,所以使用時(shí)需要手動(dòng)導(dǎo)入
  • 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.獲取擴(kuò)展名稱(chēng)(路徑末尾的擴(kuò)展名关炼,若沒(méi)有則返回空)
    • 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.判斷是否是絕對(duì)路徑
    • path.isAbsolute(path)
    • 注意點(diǎn)(區(qū)分操作系統(tǒng))
      • 在Linux操作系統(tǒng)中 ==/ 開(kāi)頭==就是絕對(duì)路徑程腹,并且路徑的分隔符是 ==左斜杠 /==
      • 在Windows操作系統(tǒng)中 ==盤(pán)符開(kāi)頭== 就是絕對(duì)路徑,并且路徑的分隔符是 ==右斜杠\\==
      • 特殊情況儒拂,可能是新規(guī)定:==示例中寸潦,\\開(kāi)頭,沒(méi)有盤(pán)符社痛,依舊是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.獲取當(dāng)前操作系統(tǒng)變量路徑分隔符
    • path.sep (windows是\ Linux是/)
      • 如果是在Linux操作系統(tǒng)中運(yùn)行那么獲取到的是 左斜杠 /
      • 如果是在Windows操作系統(tǒng)中運(yùn)行那么獲取到的是 右斜杠 \
let path = require('path');
console.log(path.sep);  //  \
  • 7.獲取當(dāng)前路徑環(huán)境路徑分隔符
    • path.delimiter (windows中使用; linux中使用:)
    • 區(qū)分操作系統(tǒng)
      - 如果是在Windows操作系統(tǒng)中運(yùn)行那么獲取到的是 ;
      - 如果是在Linux操作系統(tǒng)中運(yùn)行那么獲取到的是 :
let path = require('path');
console.log(path.delimiter);   // ;
  • 1.路徑的格式化處理(相互轉(zhuǎn)換)
    • path.parse() string->obj
      • 將路徑轉(zhuǎn)換成對(duì)象
    • path.format() obj->string
      • 將對(duì)象轉(zhuǎn)換成路徑
// 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.沒(méi)有斜杠\见转,該方法會(huì)自動(dòng)添加
      • 2.有斜杠\或者有.\都是前后參數(shù)拼接
      • 3.斜杠前面有不止一個(gè)點(diǎn).,那么會(huì)自動(dòng)根據(jù)前面的參數(shù)生成的路徑,去到上一級(jí)或上一級(jí)以上的路徑
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.規(guī)范化路徑
    • 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.計(jì)算相對(duì)路徑
    • 根據(jù)第一個(gè)路徑找到第二個(gè)路徑的相對(duì)路徑
    • 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])
      • 注意點(diǎn): ==如果后面的參數(shù)是絕對(duì)路徑, 那么前面的參數(shù)就會(huì)被忽略==
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);   

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒜哀,一起剝皮案震驚了整個(gè)濱河市斩箫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖乘客,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狐血,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡易核,警方通過(guò)查閱死者的電腦和手機(jī)匈织,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)牡直,“玉大人缀匕,你說(shuō)我怎么就攤上這事∨鲆荩” “怎么了弦追?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)花竞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)掸哑,這世上最難降的妖魔是什么约急? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮苗分,結(jié)果婚禮上厌蔽,老公的妹妹穿的比我還像新娘。我一直安慰自己摔癣,他們只是感情好奴饮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著择浊,像睡著了一般戴卜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琢岩,一...
    開(kāi)封第一講書(shū)人閱讀 52,166評(píng)論 1 308
  • 那天投剥,我揣著相機(jī)與錄音,去河邊找鬼担孔。 笑死江锨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糕篇。 我是一名探鬼主播啄育,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拌消!你這毒婦竟也來(lái)了挑豌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浮毯,沒(méi)想到半個(gè)月后完疫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡债蓝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年壳鹤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饰迹。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芳誓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啊鸭,到底是詐尸還是另有隱情锹淌,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布赠制,位于F島的核電站赂摆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钟些。R本人自食惡果不足惜烟号,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望政恍。 院中可真熱鬧汪拥,春花似錦、人聲如沸篙耗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宗弯。三九已至脯燃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罕伯,已是汗流浹背曲伊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留追他,地道東北人坟募。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像邑狸,于是被迫代替她去往敵國(guó)和親懈糯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359