JavaScript
没有二进制数据类型,buffer
是Node.js
提供的专门用来存放二进制数据的缓存区。
// 创建10字节的未启动的缓存区
var buf = Buffer.alloc(10)
// 从数组创建缓存区
var buf = Buffer.from([10, 20, 30, 40, 50])
// 从字符串创建缓存区
var buf = Buffer.from('Node.js', 'utf-8')
语法:buf.write(string[, offset[, length]][, encoding])
var buf = Buffer.alloc(256)
len = buf.write('Node.js')
console.log(len) // 7
语法:buf.toString(encoding,start,end)
encoding
:使用编码,默认utf-8
start
:读取初始索引位置end
:读取结束位置buf = Buffer.alloc(26)
for (var i = 0; i < 26; i++) {
buf[i] = i + 97
}
console.log(buf.toString('ascii')) // 输出: abcdefghijklmnopqrstuvwxyz
console.log(buf.toString('ascii', 0, 5)) //使用 'ascii' 编码, 并输出: abcde
console.log(buf.toString('utf8', 0, 5)) // 使用 'utf8' 编码, 并输出: abcde
console.log(buf.toString(undefined, 0, 5)) // 使用默认的 'utf8' 编码, 并输出: abcde
语法:buf.toJson
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5])
const json = JSON.stringify(buf)
// 输出: {"type":"Buffer","data":[1,2,3,4,5]}
console.log(json)
const copy = JSON.parse(json, (key, value) => {
return value && value.type === 'Buffer' ? Buffer.from(value.data) : value
})
// 输出: <Buffer 01 02 03 04 05>
console.log(copy)
语法:Buffer.contact(list,totalLength)
list
:用于合并的Buffer
对象数组列表totalLength
:合并后Buffer
对象的总长度var buf1 = Buffer.from('Hello')
var buf2 = Buffer.from(' World!')
var buf3 = Buffer.concat([buf1, buf2])
console.log(buf3) //<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64 21>
语法:buf.compare(..)
返回数字,0 表示相同,小于 0 表示 buf 在 bufToCompare 之前,大于 0 则相反
var buf = Buffer.from('Hello')
var bufToCompare = Buffer.from('hello')
var result = buf.compare(bufToCompare)
console.log(result) // -1
语法:buf.copy(target,targetStart,sourceStart,sourceEnd)
target
:要拷贝的Buffer
对象targetStart
:默认 0sourceStart
:默认 0sourceEnd
:默认 0var buf = Buffer.from('Hello')
var bufToCopy = Buffer.from('World')
bufToCopy.copy(buf, 2)
console.log(buf.toString()) //HeWor
语法:buf.slice(start,end)
start
:切片初始位置,默认 0end
:切片结束位置,默认为buffer.length
var buf = Buffer.from('Hello World')
var result = buf.slice(0, 5)
console.log(result.toString()) //Hello