当前位置: 首页 > news >正文

node学习记录(1)

1.buffer

buffer.allocUnsafe(size)和allocUnsafeSlow(size)可以迅速创建一个buffer实例,但是使用的内存可能来源于共享内存池,因此可能包含有内存中未释放的旧数据。最好使用前完全重写内存。

共享内存的还包括:Buffer.from(arrayBuffer[, byteOffset [, length]]) 返回一个新的 Buffer,它与给定的 ArrayBuffer 共享相同的已分配内存

const arr = new Uint16Array(2);

arr[0] = 5000;
arr[1] = 4000;

// 拷贝 `arr` 的内容。
const buf1 = Buffer.from(arr);
// 与 `arr` 共享内存。
const buf2 = Buffer.from(arr.buffer);

console.log(buf1);
// 打印: <Buffer 88 a0>
console.log(buf2);
// 打印: <Buffer 88 13 a0 0f>

arr[1] = 6000;

console.log(buf1);
// 打印: <Buffer 88 a0>
console.log(buf2);
// 打印: <Buffer 88 13 70 17>
复制代码

以及使用slice切割的buffer内容,也是共享buffer内存

buf.byteOffset

需要注意的是,当Buffer.from(ArrayBuffer, byteOffset, length) 设置了 byteOffset 或创建一个小于 Buffer.poolSize 的 Buffer 时,底层的 ArrayBuffer 的偏移量并不是从 0 开始

const nodeBuffer = Buffer.from('test poolsize byteoffset')
console.log(nodeBuffer.byteOffset)//512
const nodeBuffer1 = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
console.log(nodeBuffer.byteOffset)//536
复制代码

因此,当使用 Buffer 创建 TypedArray 时,需要正确地指定 byteOffset。直接使用 buf.buffer 访问底层的 ArrayBuffer 时, ArrayBuffer 的第一个字节可能并不指向 buf 对象

// 创建一个小于 `Buffer.poolSize` 的 `Buffer`。
const nodeBuffer = new Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

// 将 `Buffer` 赋值给一个 `Int8Array`。
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);
复制代码

相关文章:

  • jetty for linux 启用日志
  • 《码出高效》学习笔记与书中错误记录
  • Keystone controller.py routers.py代码解析
  • 测试管理-测试问题监控
  • Bash破壳漏洞
  • Python实现跨平台运维小神器
  • 一篇很全面的IOS面试题(下)
  • ViewController与outlet绑定
  • 三、Python-列表
  • 创建和删除数据库和基本查询
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 内置对象String及String的常用操作
  • Java提高篇——单例模式
  • 致远力推协同运营中台,赋能数字化升级
  • 文件属性权限及其权限设置
  • 30秒的PHP代码片段(1)数组 - Array
  • cookie和session
  •  D - 粉碎叛乱F - 其他起义
  • gcc介绍及安装
  • js正则,这点儿就够用了
  • Python语法速览与机器学习开发环境搭建
  • Redis的resp协议
  • Vue组件定义
  • 包装类对象
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 解析 Webpack中import、require、按需加载的执行过程
  • 力扣(LeetCode)22
  • 山寨一个 Promise
  • 怎么将电脑中的声音录制成WAV格式
  • 7行Python代码的人脸识别
  • ​第20课 在Android Native开发中加入新的C++类
  • (1)STL算法之遍历容器
  • (12)目标检测_SSD基于pytorch搭建代码
  • (3)llvm ir转换过程
  • (4.10~4.16)
  • (pojstep1.3.1)1017(构造法模拟)
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ****Linux下Mysql的安装和配置
  • **PHP分步表单提交思路(分页表单提交)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net 7 上传文件踩坑
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net core 6.0 升8.0
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net6使用Sejil可视化日志
  • .Net中的设计模式——Factory Method模式
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] STL_list 使用及其模拟实现
  • [ Linux ] git工具的基本使用(仓库的构建,提交)