Buffer在node運行時自動加載,掛載到global對象上,因此使用不須要require
Buffer是一個相似Array的對象,但它主要操做字節。
Buffer所佔內存不經過V8分配,屬於堆外內存。
Buffer相似於數組格式,內部元素是16進制的兩位數,即0~255
Utf-8狀況下,漢字佔3位,符號和字母佔一位node
可經過下角標訪問元素和賦值。c++
let buffer = new Buffer(100) buffer[10] = -100 // 156 若是賦值比0小,則加上256 buffer[20] = 300 // 44 若是賦值比255大,則減去256 buffer[30] = 3.1415 // 3 小數則捨棄小數部分,保留整數 console.log(buffer[1]) //會打印一個0到255的隨機值
Buffer內存分配不經過v8,是由於Buffer的性能相關部分是經過C++實現的,因此它的內存是經過c++層面實現的。
Buffer內存分配時,以8kb爲界限數組
Buffer能夠與字符串直接進行轉換,支持如下格式性能
Buffer對象儘可能不要使用+運算符進行拼接,以下代碼ui
const fs = require(‘fs’) let rs = fs.createReadStream(’test.txt’) let data = ‘' rs.on(‘data’, function(chunk) { data += chunk }) rs.on(‘end’, function() { console.log(data) })
data += chunk這句話蘊含了toString()轉換,等價於data = data.toString() + chunk.toString()
chunk爲Buffer對象,如何內部含義寬字節編碼,toString()就會致使亂碼。編碼