缓冲区
把信息存放到缓冲区中,然后使用不同的编码读取。
字符编码
编码 | 描述 |
---|---|
ascii | 7位ASCII码 |
base64 | Base64 编码 |
binary | 即latin1 |
hex | 每个字节用2个16进制符表示 |
utf8 | 多字节编码的 Unicode 字符,开发网页时经常使用 |
utf16le | 16位unicode字符,小端次序 |
ucs2 | 即utf16le |
latin1 | 单字节编码,向下兼容ASCII码 |
创建缓冲区
创建缓冲区的静态方法:
静态方法:
- Buffer.alloc(size[, fill[, encoding]])
- Buffer.allocUnsafe(size)
- Buffer.allocUnsafeSlow(size)
- Buffer.from(array)
- Buffer.from(arrayBuffer[, byteOffset[, length]])
- Buffer.from(buffer)
- Buffer.from(object[,offsetOrEncoding[, length]])
- Buffer.from(string[,encoding])
例子1:
Buffer.alloc(5)代表分配5个字节,默认值为全部清0
Buffer.alloc(5,1) 代表分配5个字节,每个字节的默认值统一为0x01
allocUnsafe和allocUnsafeSlow方法:
为何allocUnsafe和allocUnsafeSlow方法不安全?因为初始化内存段时未清零,存在内存泄漏的问题。
例子2:
解决allocUnsafe 缓存未清0问题,可以使用fill(0)去清0。
这个缓存申请了5个字节,6个字节的信息拷贝过来,也只会使用5个字节。
写入缓冲区
node.js挺方便,写入缓冲区可以选择大端和小端模式。
大端:低地址存放高位字节
…
高地址存放低位字节
小端:低地址存放低位字节
…
高地址存放高位字节
静态方法:
buf.write(string[, offset[, length]][, encoding])
buf.writeBigInt64BE(value[, offset])
buf.writeBigInt64LE(value[, offset])
buf.writeBigUInt64BE(value[, offset])
buf.writeBigUInt64LE(value[, offset])
buf.writeDoubleBE(value[, offset])
buf.writeDoubleLE(value[, offset])
buf.writeFloatBE(value[, offset])
buf.writeFloatLE(value[, offset])
buf.writeInt8(value[, offset])
buf.writeInt16BE(value[, offset])
buf.writeInt16LE(value[, offset])
buf.writeInt32BE(value[, offset])
buf.writeInt32LE(value[, offset])
buf.writeIntBE(value, offset, byteLength)
buf.writeIntLE(value, offset, byteLength)
buf.writeUInt8(value[, offset])
buf.writeUInt16BE(value[, offset])
buf.writeUInt16LE(value[, offset])
buf.writeUInt32BE(value[, offset])
buf.writeUInt32LE(value[, offset])
buf.writeUIntBE(value, offset, byteLength)
buf.writeUIntLE(value, offset, byteLength)
缓冲区读取数据
buf.toString([encoding[, start[, end]]])
buf.readBigInt64BE([offset])
buf.readBigInt64LE([offset])
buf.readBigUInt64BE([offset])
buf.readBigUInt64LE([offset])
buf.readDoubleBE([offset])
buf.readDoubleLE([offset])
buf.readFloatBE([offset])
buf.readFloatLE([offset])
buf.readInt8([offset])
buf.readInt16BE([offset])
buf.readInt16LE([offset])
buf.readInt32BE([offset])
buf.readInt32LE([offset])
buf.readIntBE(offset, byteLength)
buf.readIntLE(offset, byteLength)
buf.readUInt8([offset])
buf.readUInt16BE([offset])
buf.readUInt16LE([offset])
buf.readUInt32BE([offset])
buf.readUInt32LE([offset])
buf.readUIntBE(offset, byteLength)
buf.readUIntLE(offset, byteLength)
缓冲区转为json
什么是json?
储存和传输数据的文本格式
‘{“name”:“Angela”,“sex”:“F”}’
静态方法:
buf.toJSON()