node随笔-二进制数组buffer

Buffer简介

在 ECMAScript 2015 (ES6) 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。

TypedArray 现已被添加进 ES6 中,Buffer 类以一种更优化、更适合 Node.js 用例的方式实现了 Uint8Array API。

Buffer 类的实例类似于整数数组,但 Buffer 的大小是固定的、且在 V8 堆外分配物理内存。 Buffer 的大小在被创建时确定,且无法调整。

Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require(‘buffer‘).BufferBuffer 中元素为16进制的Number类型,大小为8b

Buffer常用的方法

Buffer.from()  将字符串转换为buffer数据

Buffer.alloc(10) 创建一个指定长度为10的buffer数据,改方法在创建内存空间的时候,同时将数据清空。

Buffer.allocUnsafe(10) 创建一个指定长度为10的buffer数据,改方法在创建内存空间的时候,内存空间中的数据没有清空,可能含有敏感数据。

Buffer.byteLength(string[, encoding]) 返回string在内存中分配字节长度

Buffer.isBuffer(buf) 判断buf是否为Buffer对象

buf.buffer

buffer 属性指向创建该 Buffer 的底层的 ArrayBuffer对象。

const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);

console.log(buffer.buffer === arrayBuffer);
// 输出: true

buf.equals(otherBuffer) buf 与 otherBuffer 具有完全相同的字节,则返回 true,否则返回 false

例子:

const buf1 = Buffer.from(‘ABC‘);
const buf2 = Buffer.from(‘414243‘, ‘hex‘);
const buf3 = Buffer.from(‘ABCD‘);

// 输出: true
console.log(buf1.equals(buf2));

// 输出: false
console.log(buf1.equals(buf3));

buf.fill(value[, offset[, end]][, encoding]) 该方法与Array.fill()类似

buf.includes(value[, byteOffset][, encoding])

  • value <string> | <Buffer> | <integer> 要搜索的值
  • byteOffset <integer> buf 中开始搜索的位置。默认: 0
  • encoding <string> 如果 value 是一个字符串,则这是它的字符编码。 默认: ‘utf8‘
  • 返回: <boolean> 如果 buf 找到 value,则返回 true,否则返回 false

相当于 buf.indexOf() !== -1

例子:

const buf = Buffer.from(‘this is a buffer‘);

// 输出: true
console.log(buf.includes(‘this‘));

// 输出: true
console.log(buf.includes(‘is‘));

// 输出: true
console.log(buf.includes(Buffer.from(‘a buffer‘)));

// 输出: true
// (97 是 ‘a‘ 的十进制 ASCII 值)
console.log(buf.includes(97));

// 输出: false
console.log(buf.includes(Buffer.from(‘a buffer example‘)));

// 输出: true
console.log(buf.includes(Buffer.from(‘a buffer example‘).slice(0, 8)));

// 输出: false
console.log(buf.includes(‘this‘, 4));
 

Buffer与字符编码

Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换。

例子:

const buf = Buffer.from(‘hello world‘, ‘ascii‘);

// 输出 68656c6c6f20776f726c64
console.log(buf.toString(‘hex‘));

// 输出 aGVsbG8gd29ybGQ=
console.log(buf.toString(‘base64‘));

 



原文地址:https://www.cnblogs.com/xiaowang0808/p/8492522.html

时间: 2024-10-09 07:03:32

node随笔-二进制数组buffer的相关文章

Node.js系列:Buffer类的使用

客户端JavaScript中没有对二进制数据提供很好的支持.但是在处理TCP流或文件流时,必须要处理二进制数据.Node.js定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区. Buffer中存的数据默认为16进制. 1.创建Buffer对象 在Node.js中,Buffer类是一个可以在任何模块中不使用的全局类,不要单独加载.可以使用New关键字来创建该类的实例对象. Buffer类有三种形式的构造函数: 第一种:将缓存区大小(以字节为单位)作为构造函数的参数 var size

二进制数组

前面的话 二进制数组(ArrayBuffer对象.TypedArray视图和DataView视图)是javascript操作二进制数据的一个接口.这些对象早就存在,属于独立的规格(2011年2月发布),ES6将它们纳入了ECMAScript规格,并且增加了新的方法.本文将详细介绍二进制数组 引入 二进制数组的原始设计目的,与WebGL项目有关.所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足javascript与显卡之间大量的.实时的数据交换,它们之间的数据通信必须是二进制的,而不能是

es6二进制数组--基础

一.概念二进制数组由 ArrayBuffer对象 TypeArray 视图和DataView视图 三部分组成是javascript操作二进制数据的一个接口. 早在2011年2月就已经发布,但是由于ES6 的出现,将这些对象添加了一些新的方法.它是一种类似C语言中直接操作字节的机制. 产生背景这个接口的原始设计目的,与WebGL项目有关.所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的.实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文

js二进制数组创建注意点

js二进制数组创建注意点:关于二进制数组的更多内容可以参阅ES2015 TypedArray视图一章节.可以通过ArrayBuffer对象分配内存,然后再建立视图.视图也可以不通过ArrayBuffer对象,直接分配内存而生成,代码实例如下: var view16 = new Int16Array(2); view16[0] = 1; view16[1] = 2; console.log(view16[1]); 但是你不能够通过下面的方式来创建: var view16 = new Int16Ar

C#中将图片文件转化为二进制数组-用于数据库存储

在项目开发中,使用SQL Server存储数据,数据类型image可以保存图片.但是在存储之前需要将图片转化为二进制数组的形式进行赋值. 将图片文件转换为二进制数组 /// <summary> /// 将图片文件转换为二进制数组 /// </summary> /// <param name=”picpath”>图片路径</param> /// <returns>二进制数组</returns> private byte[] GetBin

Node.js缓冲模块Buffer

前言 Javascript是为浏览器而设计的,能很好的处理unicode编码的字符串,但对于二进制或非unicode编码的数据就显得无能为力.Node.js继承Javascript的语言特性,同时又扩展了Javascript语言,为二进制的数据处理提供了Buffer类,让Node.js可以像其他程序语言一样,能处理各种类型的数据了. 网上有很多讲Buffer的文章,大都讲的是原理,怎么使用几乎找不到,文章将重点介绍Buffer的使用. 目录 Buffer介绍 Buffer的基本使用 Buffer

ArrayBuffer、TypedArray、DataView二进制数组

三个是处理二进制数据的接口.都是类数组. 1.ArrayBuffer是什么? ArrayBuffer是一个二进制对象(文件,图片等).它指向固定长度的,连续的内存区域. const buffer = new ArrayBuffer(16); // buffer.byteLength === 16 生成16位字节的二进制数据,每一位都默认是0 上面分配了一个长度为16个字节的内存区域,代表16byte的二进制数据.并且默认每bit内容都是0. 1.特点 1)和数组不同,它创建后长度就固定了,不能增

node.js模块之Buffer模块

http://nodejs.org/api/buffer.html Pure JavaScript is Unicode friendly but not nice to binary data. When dealing with TCP streams or the file system, it's necessary to handle octet streams. Node has several strategies for manipulating, creating, and c

node.js里的buffer常见操作,copy,concat等实例讲解

//通过长度构建的buffer内容是随机的 var buffer=new Buffer(100); console.log(buffer); //手动清空buffer,一般创建buffer不会清空 buffer.fill(0); //通过字符串创建buffer //字符串具有不变性 var str="阿尼"; var buffer=new Buffer(str); console.log(buffer) // 通过数据创建 ,一般这种方式用的较少 var buffer=new Buff