Buffer和二進(jìn)制
對(duì)于前端開發(fā)來說,通常很少會(huì)和二進(jìn)制打交道,但是對(duì)于服務(wù)器端為了做很多的功能,我們必須直接去操作其二進(jìn)制的數(shù)據(jù);所以Node為了可以方便開發(fā)者完成更多功能,提供給了我們一個(gè)類Buffer,并且它是全局的。
1.Buffer中存儲(chǔ)的是二進(jìn)制數(shù)據(jù),那么到底是如何存儲(chǔ)呢?
- 我們可以將Buffer看成是一個(gè)存儲(chǔ)二進(jìn)制的數(shù)組
- 這個(gè)數(shù)組中的每一項(xiàng),可以保存8位二進(jìn)制: 00000000
2.為什么是8位呢
- 在計(jì)算機(jī)中,很少的情況我們會(huì)直接操作一位二進(jìn)制,因?yàn)橐晃欢M(jìn)制存儲(chǔ)的數(shù)據(jù)是非常有限的;
- 所以通常會(huì)將8位合在一起作為一個(gè)單元,這個(gè)單元稱之為一個(gè)字節(jié)(byte);
- 也就是說 1byte = 8bit,1kb=1024byte,1M=1024kb;
- 比如RGB的值分別都是255,所以本質(zhì)上在計(jì)算機(jī)中都是用一個(gè)字節(jié)存儲(chǔ)的;
Buffer和字符串
- Buffer相當(dāng)于是一個(gè)字節(jié)的數(shù)組,數(shù)組中的每一項(xiàng)對(duì)于一個(gè)字節(jié)的大?。?/li>
- 如果我們希望將一個(gè)字符串放入到Buffer中,是怎么樣的過程呢
const message = 'Hello world'
// 1.創(chuàng)建方式一
// const buffer = new Buffer(message)
// console.log(buffer)
// 2.創(chuàng)建方式二
const buffer = Buffer.from(message)
console.log(buffer);
將字符串轉(zhuǎn)成對(duì)應(yīng)的ascall碼的16進(jìn)制,Buffer中存儲(chǔ)的是其對(duì)應(yīng)的16進(jìn)制。
中文如何解析
- 默認(rèn)編碼:utf-8
- 可以改成utf16
const message = '你好啊'
// const buffer = Buffer.from(message,'utf8')
const buffer = Buffer.from(message, 'utf16le')
console.log(buffer)
console.log(buffer.toString('utf16le'))
編碼解碼需要保持同一種格式
解碼可以使用toString()
Buffer的其它創(chuàng)建方式
1.使用 Buffer.alloc() 方法創(chuàng)建指定大小的 Buffer,該方法會(huì)將 Buffer 中的所有字節(jié)都設(shè)置為 0。例如:
const buffer = Buffer.alloc(8)
console.log(buffer)
buffer[0] = 0x88
console.log(buffer)
2.使用 Buffer.allocUnsafe() 方法創(chuàng)建指定大小的 Buffer,該方法不會(huì)清空 Buffer 中的數(shù)據(jù),因此創(chuàng)建的 Buffer 可能包含敏感信息。如果需要清空 Buffer 中的數(shù)據(jù),可以使用 Buffer.fill() 方法。例如:
const buf = Buffer.allocUnsafe(10);
buf.fill(0);
console.log(buf)
這個(gè)例子中,創(chuàng)建了一個(gè)大小為 10 字節(jié)的未初始化的 Buffer 對(duì)象,然后使用 fill() 方法將所有字節(jié)都設(shè)置為 0。
Buffer和文件讀取
sharp:圖片的處理,包括裁剪。 https://blog.lcddjm.com/sharp-documents-cn/文章來源:http://www.zghlxwxcb.cn/news/detail-496450.html
npm i sharp文章來源地址http://www.zghlxwxcb.cn/news/detail-496450.html
const fs = require('fs')
const sharp = require('sharp')
// 讀文本文件
// fs.readFile('./foo.txt', (err, data) => {
// console.log(data)
// console.log(data.toString())
// })
// 讀圖片
// fs.readFile('./bar.png', (err, data) => {
// console.log(data)
// // 復(fù)制文件
// fs.writeFile('./copybar.png', data, (err, data) => {
// console.log(err)
// })
// })
// sharp的使用
sharp('./bar.png')
.resize(300, 300)
.toBuffer()
.then(data => {
fs.writeFile('./bax.png', data, err => console.log(err))
})
到了這里,關(guān)于04-Buffer的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!