JS在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
最小矩阵宽度(从第一列开始一列列加,直到判断子矩阵内包含数组的所有元素) 发布于:2025-04-16 19:10 最小交付时间(二分+回溯:先将数组排序,最小值start=Math.max(arr),最大值end = arr.reduce,回溯中创建一个新的工人数组,每次遍历数组时将数组中的每一个元素都尝试分配给worker[i]) 发布于:2025-04-16 18:53 阿里巴巴找黄金宝箱Ⅳ(单调栈:栈中存储单调递减的元素的集合,当找到比栈顶元素大的元素时,循环出栈直到栈顶元素不小于当前元素) 发布于:2025-04-15 17:47 找出经过特定点的路径长度(dfs+回溯) 发布于:2025-04-14 16:32 计算最接近的数(1.输入处理;2.对数组进行深拷贝,然后对新数组进行排序,之后在进行后续操作) 发布于:2025-04-14 15:11 MELON的难题(01背包问题:先判断数组和是否为偶数,如果为偶数直接输出-1,target=sum/2 状态转移方程dp[i]=Math.min(dp[i],dp[i-1]+1) 发布于:2025-04-11 17:29 简易内存池(模拟,双指针) 发布于:2025-04-11 17:12 通过软盘拷贝文件 这是一个典型的 0-1 背包问题的变体: 问题描述: 有一个容量为 1.44MB(1474560字节)的软盘 每个块大小为 512 字节 需要在有限容量内存储最大的文件字节总和 关键点: 文件大小以字节为单位 存储空间以块为单位 即使文件不足一个块,也要占用整个块的空间 动态规划解析: 状态定义:dp[i] 表示使用 i 个块时能存储的最大字节数 状态转移:对每个文件,可以选择放入或不放入 约束条件:总块数不能超过软盘容量 时间复杂度:O(n maxSize),其中: n 是文件数量 maxSize 是软盘最大块数(约2880块) 发布于:2025-04-11 16:39 正整数到excel编号之间的转换(对num先进行取余操作,取余之后的值就是字母a往后的偏移量,letter=String.fromCharCode('a'.charCodeAt(0)+remain),将这个字母放到结果队首,然后对num进行整除,循环直到num为0) 发布于:2025-04-10 17:46 最少交换次数(滑动窗口:先算出整个数组内<k的个数,作为窗口大小,然后再算出0-window内>=k的个数,作为res的初始值,然后滑动窗口,当arr[left]>=k时,res--,当arr[right]>=k时,res++) 发布于:2025-04-10 17:40 TLV解析 Ⅱ(字符串操作) 发布于:2025-04-10 16:24 最少有多少个小朋友了(相同的数字的个数/(相同个数+1)*(相同个数+1)) 发布于:2025-04-10 15:11 硬件产品销售方案(回溯 backtrack(path,val,sum)=>) 发布于:2025-04-09 18:40 猴子爬山(动态规划:状态转义方程dp[i]=dp[i-1]+dp[i-3]) 发布于:2025-04-09 18:14 检测工具代码 发布于:2025-04-09 18:03 检查是否存在满足条件的数字组合)(双指针,然后多重判断) 发布于:2025-04-09 17:45 阿里巴巴找黄金宝箱III(遍历数组,用map储存arr[i]上一次出现的下标,如果当前下标位置i-map.get(i)<=k,直接输出left) 发布于:2025-04-09 17:07 阿里巴巴找黄金宝箱II(数组排序,每次都找最大的减) 发布于:2025-04-09 16:48 全量和已占用字符集(字符串操作) 发布于:2025-04-09 16:34 微服务的集成测试(dfs:当扫描到第i行的第i个元素为1时,就递归dfs,sum+=Math.max(max,dfs(j))) 发布于:2025-04-09 16:25 经典屏保问题(判断是否反向:右下角坐标值为(x+50,y+25),当右下角撞到下面或者右边的墙时,就将x轴/y轴的移动方向反向,左上角同理。) 发布于:2025-04-08 18:37 阿里巴巴找黄金宝箱(I)(左右数组的和,如果左右数组的和相等,就输出) 发布于:2025-04-08 16:57 告警抑制(Map) 发布于:2025-04-08 16:35 过滤组合字符串(全排列:回溯) 发布于:2025-04-03 18:56 分糖果(判断是否为偶数,如果为偶数,操作次数+1,n=n/2;如果为奇数,判断(n+1)/2是否为偶数,如果是偶数,n=n+1,res++,否则n=n-1,res++) 发布于:2025-04-03 18:24 查找接口成功率最优时间段(用前缀和求出[left,right]区间的和,然后求平均值,和输入值比较,如果<=平均值,就移动右指针,如果>平均值,说明当前位置有一个当前最大的区间,比较这个区间是否为最大,如果不是则继续,如果是最大,则更新res结果;如果和当前的i最大值一样,那就将两个都放入到res中。最后,如果left和right不相等,说明最后一个窗口没处理完成,需要单独处理) 发布于:2025-04-03 18:15 游戏分组(dfs // 深度优先搜索函数 // 参数说明: // idx: 当前考虑的数组索引 // level: 当前已选择的数字个数 // subSum: 当前已选择数字的和 // totalSum: 整个数组的总和) 发布于:2025-04-03 17:18 新学校选址(找到一个数组排序后的中位数,如果是基数就是这个数,如果是偶数就是这个数的前一个数) 发布于:2025-04-03 16:38 绘图机器(从(0,0)到第一个点时,是先走横坐标,再走纵坐标,所以第一个点的面积应该为0) 发布于:2025-04-02 19:14 素数之积(判断是否为素数的函数:function isPrime(n) { if (n < 2) return false; for (let i = 2; i <= Math.sqrt(n); i++) { if (n % i === 0) return false; } return true; } 发布于:2025-04-02 17:43 考勤信息(滑动窗口统计七天之内的考勤状况) 发布于:2025-04-02 17:27 打印机队列(简单的数组模拟) 发布于:2025-04-02 16:29 JS AES128加解密 发布于:2025-04-03 15:28 找出重复代码】(二维动态规划:定义二维数组dp,初始值设为0,循环两个字符串,如果str1[i]=str2[j],dp[i+1][j+1]==dp[i][j]+1;使用maxLength定义当前最大的公共子串长度,如果dp[i+1][j+1]>maxLength,记录maxLength和当前结束位置i+1。循环后,根据maxLength和结束位置p,确定silce的范围 发布于:2025-04-01 19:24 【二叉树中序遍历】(用栈将二叉树的结构处理出来。然后中序遍历) 发布于:2025-04-01 19:08 【最小调整顺序次数】(模拟队列操作:当插入操作为头操作时,如果数组不为空,就不是排序状态。尾插入不影响;当移除元素时,如果当前队列是有序的 ,就不需要操作,否则就需要操作,ans++) 发布于:2025-04-01 18:29 二元组个数】(用map存储第一个数组中出现的元素及个数,然后遍历第二个数组,如果遇到map中的元素,ans+=map.get()) 发布于:2025-04-01 18:02 【文件目录大小】(递归:先读取每个文件的信息,解析每行输入的三个部分:id,size,child并将处理过后的放入files中,files:{id,size,child}。然后递归计算目标目录的大小:自定义一个递归函数 getSize,将目标目录设为root节点,向下递归子文件夹,如果有子文件夹就递归计算所有子节点的大小并累加,最后返回结果) 发布于:2025-04-01 17:49 华为OD机试真题 Python 实现【水库蓄水问题】(变体接雨水问题,用双指针遍历数组,然后将子数组内的每一个数字能接到的雨水相加(如果当前位置数字 小于左右边界的最小值,能够接水),如果有多个位置接的雨水相同,保留right-left最小的) 发布于:2025-04-01 17:23 找出两个整数数组中同时出现的整数】(用map存储第一个数组中的元素,然后再循环第二个数组,当遇到map中有的数字时,记录下这个数字。再创建新的Map,按出现次数分组存储数字// 获取当前数字及其在第一个数组中的出现次数// 将数字添加到对应次数的组中,并保持组内数字有序;// 获取所有出现次数并按升序排序// 按格式输出结果) 发布于:2025-04-01 16:47 模拟消息队列(两个数组,一个用来存消息,一个用来存接受者,接受者的中包括订阅时间取消时间和能接收到的消息,正序循环message数组,在逆序循环接受者数组,每当有发送消息的时间在订阅和取关之间时,把这个消息放到消息队列中) 发布于:2025-04-01 16:22 【投篮大赛】(简单字符串操作) 发布于:2025-04-01 16:05 【数值同化】(广度优先搜索,搜索能够到达的所有格子,然后遍历矩阵找出无法到达的地区) 发布于:2025-04-01 15:29 数字加减游戏(数学问题:先判断目标-初始是否能被b整除,如果能直接输出0.如果不能就每次判断初始值+a*x或初始值-a*x是否能整除b,如果能,就时最优解) 发布于:2025-04-01 15:10 数组二叉树(// 遍历树中的所有节点,寻找最小的叶子节点 // 判断当前节点是否为叶子节点,需满足以下条件: // 1. 节点值不为 -1(不是空节点) // 2. 节点值小于当前找到的最小叶子值 // 3. 左子节点不存在(超出数组范围或为-1) // 4. 右子节点不存在(超出数组范围或为-1) // 更新最小叶子节点的索引和值,找到叶子节点后,根据叶子节点不断向上推导出父节点,直到找到根节点。对于索引i,其父节点索引为 floor((i-1)/2)) 发布于:2025-04-01 14:56 【招聘】计算至少需要的面试官数量( // 核心算法思路: // 1. 首先对所有面试时间区间按开始时间排序 // 2. 检查相邻区间是否存在时间重叠 // 3. 对于重叠的区间,需要额外的面试官 // 4. 最后根据重叠情况和每个面试官的面试次数限制(m)计算所需面试官总数) 发布于:2025-03-31 18:44 查找一个有向网络的头节点和尾节点(读取输入数据并解析 统计每个节点的入度和出度 使用Map存储节点的入度和出度 每处理一条边,同时更新起点和终点的度数 入度为0的节点是起点 出度为0的节点是终点 终点需要降序排序 检查是否存在起点和终点 收集所有起点和终点 对终点进行排序 输出结果) 发布于:2025-03-31 17:51 数字序列比大小(田忌赛马:首先对两个数组进行升序排序 对arrA中的每个元素: 在arrB中查找第一个大于等于它的元素 如果找到,使用该位置的前一个元素进行匹配(得1分) 如果找不到,使用arrB的最后一个元素(得-1分)) 发布于:2025-03-31 17:20 寻找最大价值的矿堆(BFS函数实现: 参数:起始位置(i,j) 功能: 计算从起始位置开始的连通区域的和 使用BFS遍历所有相邻的位置 将已访问的位置标记为0 返回连通区域的和 主要流程: 读取矩阵数据 遍历矩阵的每个位置 对未访问的位置进行BFS 更新最大连通区域的和 关键点: 使用0标记已访问的位置 只处理值大于0的位置 考虑四个方向的相邻位置 使用Math.max更新最大和) 发布于:2025-03-31 16:53 仿LISP运算(遍历输入字符串的每个字符,遇到右括号或空格时,处理已收集的字符 遇到右括号时,进行运算,收集非括号和空格的字符;运算时从栈中弹出两个操作数和一个运算符,根据运算符执行相应的运算,将运算结果压入栈中,处理除数为0的特殊情况) 发布于:2025-03-31 16:35 [更多]
显示目录

Buffer



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

Buffer

稳定性: 3 - 稳定

纯Javascript语言对Unicode友好,能够很好地处理Unicode编码的字符串数据,但是难以处理二进制数据。在处理TCP流和文件系统时经常需要操作字节流。Node提供了一些机制,用于操作、创建、以及消耗字节流。

在Node.js中提供了Buffer,它可以处理二进制以及非Unicode编码的数据。

在Buffer类实例化中存储了原始数据。Buffer类似于一个整数数组,在V8堆(the V8 heap)原始存储空间给它分配了内存。一旦创建了Buffer实例,则无法改变大小。

Buffer 类是全局对象,所以访问它不必使用 require('buffer') 。

Buffers和Javascript字符串对象之间转换时需要一个明确的编码方法。下面是字符串的不同编码:

  • 'ascii' - 7位的ASCII数据。这种编码方式非常快,它会移除最高位内容。

  • 'utf8' - 多字节编码Unicode字符。大部分网页和文档使用这类编码方式。

  • 'utf16le' - 2个或4个字节, Little Endian (LE)编码Unicode字符。编码范围(U+10000 到 U+10FFFF) 。

  • 'ucs2' - 'utf16le' 的子集。

  • 'base64' - Base64字符编码。

  • 'binary' - 仅使用每个字符的头8位将原始的二进制信息进行编码。在需使用Buffer的情况下,应该尽量避免使用这个已经过时的编码方式。这个编码方式将会在未来某个版本中弃用。

  • 'hex' - 每个字节都采用二进制编码。

在 Buffer 中创建一个数组,需要注意以下规则:

  1. Buffer是内存拷贝,而不是内存共享。

  2. Buffer占用内存被解释为一个数组,而不是字节数组。比如, new Uint32Array(new Buffer([1,2,3,4])) 创建了4个 Uint32Array ,它的成员为 [1,2,3,4] ,而不是 [0x1020304] 或 [0x4030201] 。

注意:Node.js v0.8只是简单的引用了 array.buffer 里的buffer,而不是对其进行克隆(cloning)。

介绍一个高效的方法, ArrayBuffer#slice() 拷贝了一份切片,而 Buffer#slice() 新建了一份。

类: Buffer

Buffer类是全局变量类型,用来直接处理二进制数据。它能够使用多种方式构建。

new Buffer(size)

  • size Number类型

分配一个新的 size 大小单位为8位字节的buffer。

注意: size 必须小于kMaxLength,否则将会抛出 RangeError 异常。

new Buffer(array)

  • array Array

使用一个8位字节 array 数组分配一个新的buffer。

new Buffer(buffer)

  • buffer {Buffer}

拷贝参数 buffer 的数据到 Buffer 实例。

new Buffer(str[, encoding])

  • str String类型 - 需要编码的字符串。
  • encoding String类型 - 编码方式, 可选。

分配一个新的buffer ,其中包含着传入的 str 字符串。 encoding 编码方式默认为 'utf8' 。

类方法: Buffer.isEncoding(encoding)

  • encoding {String} 用来测试给定的编码字符串

如果参数编码 encoding 是有效的,则返回true,否则返回false。

类方法: Buffer.isBuffer(obj)

  • obj 对象
  • 返回:Boolean

obj 如果是 Buffer 返回true,否则返回 false。

类方法: Buffer.byteLength(string[, encoding])

  • string String类型
  • encoding String类型,可选的,默认为: 'utf8'
  • 返回:Number类型

将会返回这个字符串真实字节长度。 encoding编码默认是: utf8 。 这和 String.prototype.length 不一样,因为那个方法返回这个字符串中字符的数量。

例如:

str = '\u00bd + \u00bc = \u00be';

console.log(str + ": " + str.length + " characters, " +
  Buffer.byteLength(str, 'utf8') + " bytes");

// ½ + ¼ = ¾: 9 characters, 12 bytes

类方法: Buffer.concat(list[, totalLength])

  • list {Array} 用来连接的数组
  • totalLength {Number 类型} 数组里所有对象的总buffer大小

返回一个buffer对象,它将参数buffer数组中所有buffer对象拼接在一起。

如果传入的数组没有内容,或者totalLength是0,那将返回一个长度为0的buffer。

如果数组长度为1,返回数组第一个成员。

如果数组长度大于0,将会创建一个新的Buffer实例。

如果没有提供totalLength参数,会根据buffer数组计算,这样会增加一个额外的循环计算,所以提供一个准确的totalLength参数速度更快。

类方法: Buffer.compare(buf1, buf2)

  • buf1 {Buffer}
  • buf2 {Buffer}

和buf1.compare(buf2)一样, 用来对数组排序:

var arr = [Buffer('1234'), Buffer('0123')];
arr.sort(Buffer.compare);

buf.length

  • Number类型

返回这个buffer的bytes数。注意这未必是buffer里面内容的大小。length 是buffer对象所分配的内存数,它不会随着这个buffer对象内容的改变而改变。

buf = new Buffer(1234);

console.log(buf.length);
buf.write("some string", 0, "ascii");
console.log(buf.length);

// 1234
// 1234

length不能改变,如果改变length将会导致不可以预期的结果。如果想要改变buffer的长度,需要使用buf.slice来创建新的buffer。

buf = new Buffer(10);
buf.write("abcdefghj", 0, "ascii");
console.log(buf.length); // 10
buf = buf.slice(0,5);
console.log(buf.length); // 5

buf.write(string[, offset][, length][, encoding])

  • string String类型 - 写到buffer里
  • offset Number类型,可选参数,默认值: 0
  • length Number类型,可选参数,默认值:buffer.length - offset
  • encoding String类型,可选参数,默认值: 'utf8'

根据参数offset偏移量和指定的encoding编码方式,将参数string数据写入buffer。offset偏移量默认值是0,encoding编码方式默认是utf8。 length长度是将要写入的字符串的bytes大小。返回number类型,表示写入了多少8位字节流。如果buffer没有足够的空间来放整个string,它将只会只写入部分字符串。length默认是 buffer.length - offset。 这个方法不会出现写入部分字符。

buf = new Buffer(256);
len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(len + " bytes: " + buf.toString('utf8', 0, len));

buf.writeUIntLE(value, offset, byteLength[, noAssert])

buf.writeUIntBE(value, offset, byteLength[, noAssert])

buf.writeIntLE(value, offset, byteLength[, noAssert])

buf.writeIntBE(value, offset, byteLength[, noAssert])

  • value {Number 类型}准备写到buffer字节数
  • offset {Number 类型} 0 <= offset <= buf.length
  • byteLength {Number 类型} 0 < byteLength <= 6
  • noAssert {Boolean} 默认值: false
  • 返回: {Number 类型}

将value写入到buffer里, 它由offset和byteLength决定,支持48位计算,例如:

var b = new Buffer(6);
b.writeUIntBE(0x1234567890ab, 0, 6);
// <Buffer 12 34 56 78 90 ab>

noAssert值为true时,不再验证value和offset 的有效性。 默认是false。

buf.readUIntLE(offset, byteLength[, noAssert])

buf.readUIntBE(offset, byteLength[, noAssert])

buf.readIntLE(offset, byteLength[, noAssert])

buf.readIntBE(offset, byteLength[, noAssert])

  • offset {Number 类型} 0 <= offset <= buf.length
  • byteLength {Number 类型} 0 < byteLength <= 6
  • noAssert {Boolean} 默认值: false
  • 返回: {Number 类型}

支持48位以下的数字读取。 例如:

var b = new Buffer(6);
b.writeUint16LE(0x90ab, 0);
b.writeUInt32LE(0x12345678, 2);
b.readUIntLE(0, 6).toString(16);  // 指定为 6 bytes (48 bits)
// 输出: '1234567890ab'

noAssert 值为true时, offset不再验证是否超过buffer的长度,默认为false。

buf.toString([encoding][, start][, end])

  • encoding String 类型,可选参数,默认值: 'utf8'
  • start Number 类型,可选参数,默认值: 0
  • end Number 类型,可选参数,默认值: buffer.length

根据encoding参数(默认是 'utf8')返回一个解码过的string类型。还会根据传入的参数start(默认是 0)和end (默认是 buffer.length)作为取值范围。

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
  buf[i] = i + 97; // 97 is ASCII a
}
buf.toString('ascii'); // 输出: abcdefghijklmnopqrstuvwxyz
buf.toString('ascii',0,5); // 输出: abcde
buf.toString('utf8',0,5); // 输出: abcde
buf.toString(undefined,0,5); // encoding defaults to 'utf8', 输出 abcde

查看上面buffer.write()例子。

buf.toJSON()

返回一个JSON表示的Buffer实例。JSON.stringify 将会默认调用字符串序列化这个Buffer实例。

例如:


var buf = new Buffer('test');
var json = JSON.stringify(buf);

console.log(json);
// '{"type":"Buffer","data":[116,101,115,116]}'

var copy = JSON.parse(json, function(key, value) {
    return value && value.type === 'Buffer'
      ? new Buffer(value.data)
      : value;
  });

console.log(copy);
// <Buffer 74 65 73 74>

buf[index]

获取或设置指定index位置的8位字节。这个值是指单个字节,所以必须在合法的范围取值,16进制的0x00到0xFF,或者0到255。

例如: 拷贝一个ASCII编码的string字符串到一个buffer,一次一个byte进行拷贝:

str = "node.js";
buf = new Buffer(str.length);

for (var i = 0; i < str.length ; i++) {
  buf[i] = str.charCodeAt(i);
}

console.log(buf);

// node.js

buf.equals(otherBuffer)

  • otherBuffer {Buffer}

如果 this 和 otherBuffer 拥有相同的内容,返回true。

buf.compare(otherBuffer)

  • otherBuffer {Buffer}

返回一个数字,表示 this 在 otherBuffer 之前,之后或相同。

buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])

  • targetBuffer Buffer 对象 - Buffer to copy into
  • targetStart Number 类型,可选参数, 默认值: 0
  • sourceStart Number 类型,可选参数, 默认值: 0
  • sourceEnd Number 类型,可选参数, 默认值: buffer.length

buffer拷贝,源和目标可以相同。targetStart目标开始偏移和sourceStart源开始偏移默认都是0。sourceEnd源结束位置偏移默认是源的长度 buffer.length。

例如:创建2个Buffer,然后把buf1的16到19位内容拷贝到buf2第8位之后。

buf1 = new Buffer(26);
buf2 = new Buffer(26);

for (var i = 0 ; i < 26 ; i++) {
  buf1[i] = i + 97; // 97 is ASCII a
  buf2[i] = 33; // ASCII !
}

buf1.copy(buf2, 8, 16, 20);
console.log(buf2.toString('ascii', 0, 25));

// !!!!!!!!qrst!!!!!!!!!!!!!

例如: 在同一个buffer中,从一个区域拷贝到另一个区域:

buf = new Buffer(26);

for (var i = 0 ; i < 26 ; i++) {
  buf[i] = i + 97; // 97 is ASCII a
}

buf.copy(buf, 0, 4, 10);
console.log(buf.toString());

// efghijghijklmnopqrstuvwxyz

buf.slice([start][, end])

  • start Number类型,可选参数,默认值: 0
  • end Number类型,可选参数,默认值: buffer.length

返回一个新的buffer,这个buffer将会和老的buffer引用相同的内存地址,根据start(默认是 0 ) 和end (默认是 buffer.length ) 偏移和裁剪了索引。 负的索引是从buffer尾部开始计算的。

修改这个新的buffer实例slice切片,也会改变原来的buffer!

例如: 创建一个ASCII字母的Buffer,进行slice切片,然后修改源Buffer上的一个byte。

var buf1 = new Buffer(26);

for (var i = 0 ; i < 26 ; i++) {
  buf1[i] = i + 97; // 97 is ASCII a
}

var buf2 = buf1.slice(0, 3);
console.log(buf2.toString('ascii', 0, buf2.length));
buf1[0] = 33;
console.log(buf2.toString('ascii', 0, buf2.length));

// abc
// !bc

buf.readUInt8(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从这个buffer对象里,根据指定的偏移量,读取一个有符号8位整数 整形。

若参数noAssert为true将不会验证offset偏移量参数。 如果这样offset 可能会超出buffer的末尾。默认是false。

例如:

var buf = new Buffer(4);

buf[0] = 0x3;
buf[1] = 0x4;
buf[2] = 0x23;
buf[3] = 0x42;

for (ii = 0; ii < buf.length; ii++) {
  console.log(buf.readUInt8(ii));
}

// 0x3
// 0x4
// 0x23
// 0x42

buf.readUInt16LE(offset[, noAssert])

buf.readUInt16BE(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从buffer对象里,根据指定的偏移量,使用特殊的endian字节序格式读取一个有符号16位整数。

若参数noAssert为true将不会验证offset偏移量参数。 这意味着offset可能会超出buffer的末尾。默认是false。

例如:

var buf = new Buffer(4);

buf[0] = 0x3;
buf[1] = 0x4;
buf[2] = 0x23;
buf[3] = 0x42;

console.log(buf.readUInt16BE(0));
console.log(buf.readUInt16LE(0));
console.log(buf.readUInt16BE(1));
console.log(buf.readUInt16LE(1));
console.log(buf.readUInt16BE(2));
console.log(buf.readUInt16LE(2));

// 0x0304
// 0x0403
// 0x0423
// 0x2304
// 0x2342
// 0x4223

buf.readUInt32LE(offset[, noAssert])

buf.readUInt32BE(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从这个buffer对象里,根据指定的偏移量,使用指定的endian字节序格式读取一个有符号32位整数。

若参数noAssert为true将不会验证offset偏移量参数。 这意味着offset可能会超出buffer的末尾。默认是false。

例如:

var buf = new Buffer(4);

buf[0] = 0x3;
buf[1] = 0x4;
buf[2] = 0x23;
buf[3] = 0x42;

console.log(buf.readUInt32BE(0));
console.log(buf.readUInt32LE(0));

// 0x03042342
// 0x42230403

buf.readInt8(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从这个buffer对象里,根据指定的偏移量,读取一个signed 8位整数。

若参数noAssert为true将不会验证offset偏移量参数。 这意味着offset可能会超出buffer的末尾。默认是false。

返回和buffer.readUInt8一样,除非buffer中包含了有作为2的补码的有符号值。

buf.readInt16LE(offset[, noAssert])

buf.readInt16BE(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从这个buffer对象里,根据指定的偏移量,使用特殊的endian格式读取一个signed 16位整数。

若参数noAssert为true将不会验证 offset 偏移量参数。 这意味着offset可能会超出buffer的末尾。默认是false。

返回和buffer.readUInt16一样,除非buffer中包含了有作为2的补码的有符号值。

buf.readInt32LE(offset[, noAssert])

buf.readInt32BE(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从这个buffer对象里,根据指定的偏移量,使用指定的endian字节序格式读取一个signed 32位整数。

若参数noAssert为true将不会验证offset偏移量参数。 这意味着offset可能会超出buffer的末尾。默认是false。

和buffer.readUInt32一样返回,除非buffer中包含了有作为2的补码的有符号值。

buf.readFloatLE(offset[, noAssert])

buf.readFloatBE(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从这个buffer对象里,根据指定的偏移量,使用指定的endian字节序格式读取一个32位浮点数。

若参数noAssert为true将不会验证offset偏移量参数。 这意味着offset可能会超出buffer的末尾。默认是false。

例如:

var buf = new Buffer(4);

buf[0] = 0x00;
buf[1] = 0x00;
buf[2] = 0x80;
buf[3] = 0x3f;

console.log(buf.readFloatLE(0));

// 0x01

buf.readDoubleLE(offset[, noAssert])

buf.readDoubleBE(offset[, noAssert])

  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false
  • 返回: Number类型

从这个buffer对象里,根据指定的偏移量,使用指定的endian字节序格式读取一个64位double。

若参数noAssert为true将不会验证offset偏移量参数。 这意味着offset可能会超出buffer 的末尾。默认是false。

例如:


var buf = new Buffer(8);

buf[0] = 0x55;
buf[1] = 0x55;
buf[2] = 0x55;
buf[3] = 0x55;
buf[4] = 0x55;
buf[5] = 0x55;
buf[6] = 0xd5;
buf[7] = 0x3f;

console.log(buf.readDoubleLE(0));

// 0。3333333333333333

buf.writeUInt8(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量将value写入buffer。注意:value必须是一个合法的有符号 8 位整数。

若参数noAssert为true将不会验证offset 偏移量参数。 这意味着value可能过大,或者offset可能会超出buffer的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则不要使用。默认是false。

例如:

var buf = new Buffer(4);
buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);

console.log(buf);

// <Buffer 03 04 23 42>

buf.writeUInt16LE(value, offset[, noAssert])

buf.writeUInt16BE(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量和指定的endian格式将value写入buffer。注意:value必须是一个合法的有符号16位整数。

若参数noAssert为true将不会验证value和offset偏移量参数。 这意味着value可能过大,或者offset可能会超出buffer的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则尽量不要使用。默认是false。

例如:

var buf = new Buffer(4);
buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);

console.log(buf);

buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);

console.log(buf);

// <Buffer de ad be ef>
// <Buffer ad de ef be>

buf.writeUInt32LE(value, offset[, noAssert])

buf.writeUInt32BE(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量和指定的endian格式将value写入buffer。注意:value必须是一个合法的有符号32位整数。

若参数noAssert为true将不会验证value和offset偏移量参数。 这意味着value可能过大,或者offset可能会超出buffer的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则尽量不要使用。默认是false。

例如:

var buf = new Buffer(4);
buf.writeUInt32BE(0xfeedface, 0);

console.log(buf);

buf.writeUInt32LE(0xfeedface, 0);

console.log(buf);

// <Buffer fe ed fa ce>
// <Buffer ce fa ed fe>

buf.writeInt8(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量将value写入buffer。注意:value必须是一个合法的signed 8位整数。

若参数noAssert为true将不会验证value和offset偏移量参数。这意味着value可能过大,或者offset可能会超出buffer的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则尽量不要使用。默认是false。

和buffer.writeUInt8一样工作,除非是把有2的补码的有符号整数有符号整形写入buffer。

buf.writeInt16LE(value, offset[, noAssert])

buf.writeInt16BE(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量和指定的endian格式将value写入buffer。注意:value必须是一个合法的signed 16位整数。

若参数noAssert为true将不会验证value和offset偏移量参数。 这意味着value可能过大,或者offset可能会超出buffer的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则尽量不要使用。默认是false 。

和buffer.writeUInt16*一样工作,除非是把有2的补码的有符号整数 有符号整形写入buffer。

buf.writeInt32LE(value, offset[, noAssert])

buf.writeInt32BE(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量和指定的endian格式将value写入buffer。注意:value必须是一个合法的signed 32位整数。

若参数noAssert为true将不会验证value和offset偏移量参数。 这意味着value可能过大,或者offset可能会超出 buffer 的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则尽量不要使用。默认是false。

和buffer.writeUInt32*一样工作,除非是把有2的补码的有符号整数、有符号整形写入buffer。

buf.writeFloatLE(value, offset[, noAssert])

buf.writeFloatBE(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量和指定的endian格式将value写入buffer。注意:当value不是一个32位浮点数类型的值时,结果将是不确定的。

若参数noAssert为true将不会验证value和offset偏移量参数。这意味着value可能过大,或者offset可能会超出buffer的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则尽量不要使用。默认是false。

例如:


var buf = new Buffer(4);
buf.writeFloatBE(0xcafebabe, 0);

console.log(buf);

buf.writeFloatLE(0xcafebabe, 0);

console.log(buf);

// <Buffer 4f 4a fe bb>
// <Buffer bb fe 4a 4f>

buf.writeDoubleLE(value, offset[, noAssert])

buf.writeDoubleBE(value, offset[, noAssert])

  • value Number类型
  • offset Number类型
  • noAssert Boolean,可选参数, 默认值: false

根据传入的offset偏移量和指定的endian格式将value写入buffer。注意:value必须是一个有效的64位double类型的值。

若参数noAssert为true将不会验证value和offset偏移量参数。 这意味着value可能过大,或者offset可能会超出buffer的末尾从而造成value被丢弃。 除非你对这个参数非常有把握,否则尽量不要使用。默认是false。

例如:

var buf = new Buffer(8);
buf.writeDoubleBE(0xdeadbeefcafebabe, 0);

console.log(buf);

buf.writeDoubleLE(0xdeadbeefcafebabe, 0);

console.log(buf);

// <Buffer 43 eb d5 b7 dd f9 5f d7>
// <Buffer d7 5f f9 dd b7 d5 eb 43>

buf.fill(value[, offset][, end])

  • value
  • offset Number类型, Optional
  • end Number类型, Optional

使用指定的value来填充这个buffer。如果没有指定offset (默认是 0) 并且end(默认是buffer.length) ,将会填充整个buffer。

var b = new Buffer(50);
b.fill("h");

buffer.iNSPECT_MAX_BYTES

  • Number 类型,默认值: 50

设置当调用buffer.inspect()方法后,将会返回多少bytes 。用户模块重写这个值可以。

注意这个属性是require('buffer')模块返回的。这个属性不是在全局变量Buffer中,也不在buffer的实例里。

类: SlowBuffer

返回一个不被池管理的Buffer。

大量独立分配的Buffer容易带来垃圾,为了避免这个情况,小于4KB的空间都是切割自一个较大的独立对象。这种策略既提高了性能也改善了内存使用率。V8不需要跟踪和清理过多的Persistent对象。

当开发者需要将池中一小块数据保留一段时间,比较好的办法是用SlowBuffer创建一个不被池管理的Buffer实例,并将相应数据拷贝出来,如下所示:

// need to keep around a few small chunks of memory
var store = [];

socket。on('readable', function() {
  var data = socket。read();
  // allocate for retained data
  var sb = new SlowBuffer(10);
  // copy the data into the new allocation
  data。copy(sb, 0, 0, 10);
  store。push(sb);
});

请谨慎使用,仅作为经常发现他们的应用中过度的内存保留时的最后手段。

由JSRUN为你提供的JS在线运行、在线编译工具
        JSRUN提供的JS 在线运行,JS 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout