当前位置:   article > 正文

nodejs中Buffer、ArrayBuffer、DataView详解_nodejs dataview

nodejs dataview

Buffer是nodejs独有的。ArrayBuffer是符合ES标准的。

前言

ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer 不能直接操作,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。

DataView 视图是一个可以从 ArrayBuffer 对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。

即ArrayBuffer为二进制数据的存储区域。但是ArrayBuffer的读写,都需要通过DataView来执行。同时DataView提供有.buffer可以直接返回其操作的ArrayBuffer。

var ab=new ArrayBuffer(length);
var dv = new DataView(ab);
dv.setInt8(0,data)
dv.getUint8(0)
var buffer=dv.buffer;
  • 1
  • 2
  • 3
  • 4
  • 5

Buffer是Nodejs提供的可以直接操作二进制数据的类。

DataView读写方法内存参考

setInt8:写入1个字节的8位整数。
setUint8:写入1个字节的8位无符号整数。
setInt16:写入2个字节的16位整数。
setUint16:写入2个字节的16位无符号整数。
setInt32:写入4个字节的32位整数。
setUint32:写入4个字节的32位无符号整数。
setFloat32:写入4个字节的32位浮点数。
setFloat64:写入8个字节的64位浮点数,

getInt8:读取1个字节,返回一个8位整数。
getUint8:读取1个字节,返回一个无符号的8位整数。
getInt16:读取2个字节,返回一个16位整数。
getUint16:读取2个字节,返回一个无符号的16位整数。
getInt32:读取4个字节,返回一个32位整数。
getUint32:读取4个字节,返回一个无符号的32位整数。
getFloat32:读取4个字节,返回一个32位浮点数。
getFloat64:读取8个字节,返回一个64位浮点数。

Buffer、ArrayBuffer互转

  • Buffer和ArrayBuffer互转 法一
//Buffer转ArrayBuffer
function toArrayBuffer(buf) {
	var ab = new ArrayBuffer(buf.length);
	var view = new Uint8Array(ab);
	for (var i = 0; i < buf.length; ++i) {
		view[i] = buf[i];
	}	
	return ab;		
}

//ArrayBuffer转Buffer
function toBuffer(ab) {
	var buf = new Buffer(ab.byteLength);
	var view = new Uint8Array(ab);
	for (var i = 0; i < buf.length; ++i) {
		buf[i] = view[i];
	}
	return buf;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • Buffer和ArrayBuffer互转 法二
// Buffer转ArrayBuffer
const buf = Buffer.from("this is a test");
console.log(buf);
console.log(buf.toString());
var arrayBuf = buf.buffer; //
console.log(arrayBuf);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

//ArrayBuffer转Buffer
var arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);
console.log(buffer.buffer === arrayBuffer);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/145047
推荐阅读
相关标签
  

闽ICP备14008679号