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')
- 示例:
- 格式
- 2.1創(chuàng)建一個(gè)指定大小的Buffer
-
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==
- 在Linux操作系統(tǒng)中 ==
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)行那么獲取到的是 右斜杠
\
- 如果是在Linux操作系統(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í)以上的路徑
- 1.沒(méi)有斜杠
-
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);