位置: 编程技术 - 正文

浅谈Node.js:Buffer模块(浅谈特殊儿童的融合教育论文)

编辑:rootadmin

推荐整理分享浅谈Node.js:Buffer模块(浅谈特殊儿童的融合教育论文),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:浅谈双减背景下的高效课堂,浅谈幼儿良好行为的培养论文,浅谈如何培养孩子的注意力,浅谈是什么意思,浅谈特殊儿童的融合教育论文,浅谈是什么意思,浅谈建筑地基基础加固施工技术亲,浅谈如何培养孩子的注意力,内容如对您有帮助,希望把文章链接给更多的朋友!

Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意。Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该类实现了Uint8Array接口,并对其进行了优化,它的实例类似于整型数组,但是它的大小在创建后便不可调整。在介绍Buffer如何使用之前,先介绍几个知识点。

1、V8引擎的内存使用限制

V8引擎最大堆内存使用在位系统上默认为M,在位系统上是1GB,虽然可以使用--max-old-space-size参数调整该值,但还是建议要用到大内存的时候使用Buffer或Stream,因为Buffer的内存分配不在V8的堆上。

2、单个Buffer实例大小限制

单个Buffer实例的大小最大数值为1GB-1(位系统)或2GB-1(位系统),所以在创建Buffer实例的时候不能超过该值,或者使用readFile()方法读取大文件,否则将抛出RangeError错误。

3、8KB池

Nodejs在创建Buffer实例的时候,当用户申请的空间大于8KB,会直接调用内部的createUnsafeBuffer()方法创建一个Buffer,如果申请的空间大于0且小于4KB,新的Buffer则会建立在当前的8kb SLAB上,并更新剩余空间,如下图所示:

下面介绍Buffer API的简单使用:

1、创建Buffer实例

使用Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe()等方法来创建一个Buffer实例,6.0版本以前直接使用构造函数创建的方法new Buffer()已被丢弃,不推荐使用,因为有可能会造成内存泄漏。 方法Buffer.alloc(size[, fill[, encoding]]),参数含义如下:

size,指定buffer的长度,但不能超过buffer.kMaxLength,若不是数字则报错 fill,指定初始化buffer的值,默认为0 encoding,如果fill是字符串,则该参数指定fill的编码

使用如下所示:

方法Buffer.allocUnsafe(size),size参数指定buffer的大小,该方法返回一个没有初始化的buffer,因此可能还保留有敏感的数据,造成信息的泄漏,建议使用buffer.fill(0)函数初始化buffer,该方法与Buffer.alloc(size, fill)是不一样的,有可能使用8KB池。使用如下所示:

方法Buffer.allocUnsafeSlow(size),参数含义同上,该方法不会使用Buffer池,容易造成内存的浪费,使用如下所示:

方法Buffer.from(value,[...]),这里分为四种情况,如下所示:

第一,value为进制数组,将数组转化为buffer,如果不是进制,则会进行转换,如下:

第二,value为字符串,则转换字符串为buffer,该方法会使用buffer池,如下:

第三,value为buffer实例,则将value拷贝至新的buffer中,这里只是值的拷贝,不会共享内存,如下:

浅谈Node.js:Buffer模块(浅谈特殊儿童的融合教育论文)

第四,value为arrayBuffer时,还有两个可选参数[, byteOffset[, length]],byteOffset指定从arrayBuffer开始复制的位置,length复制的长度。如下:

如果引用的是arr.buffer,则新创建的buffer buf与arr共享内存,如下:

2、buffer解码

使用buf.toString([encoding[, start[, end]]])方法将buffer转换成字符串,encoding指定字符编码,默认为'utf8',start开始位置,end结束位置(不包括),目前encoding只支持'ascii,utf8,utfle,ucs2,base,latin1,binary,hex',使用如下所示:

3、buffer拼接、复制、填充、分割

方法buf.fill(value[, offset[, end]][, encoding])使用指定的值填充buffer,参数offset指定填充的起始位置,end为结束位置,使用如下所示:

方法Buffer.concat(list[, totalLength])将多个buffer合并在一起,并返回一个新的buffer实例,参数totalLength为指定的buffers的长度总和,如果不提供该值,函数内部会循环去获取每一个buffer的长度,然后进行拼接,因此为了速度,最好指定一个总长度,使用如下:

方法buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])可以实现buf到target的复制,参数含义如下:

target,复制目标 targetStart,复制目标开始被覆盖的位置 sourceStart,复制源开始复制的位置 sourceEnd,复制源复制结束的位置

使用如下所示:

方法buf.slice([start[, end]])可以分割buffer,返回一个新的buffer,但是仍然是引用原buffer,因此改变原buffer数据,该新buffer也会跟着改变,如果参数start,end为负数,则先要加上buffer的长度再进行计算,如下所示:

3、buffer读写

buffer写操作通过write开头的写api来完成,主要有以下这些:

buf.write(string[, offset[, length]][, encoding]),向buffer写入字符串 buf.writeDoubleBE(value, offset[, noAssert])写入位浮点型数字,大端对齐 buf.writeDoubleLE(value, offset[, noAssert]),写入位浮点型数字,小端对齐 buf.writeFloatBE(value, offset[, noAssert]),写入位浮点型数字,大端对齐 buf.writeFloatLE(value, offset[, noAssert]),写入位浮点型数字,小端对齐 buf.writeInt8(value, offset[, noAssert]),写入有符号8位整型数字 buf.writeIntBE(value, offset[, noAssert]),写入有符号位整型数字,大端对齐 buf.writeIntLE(value, offset[, noAssert]),写入有符号位整型数字,小端对齐 buf.writeIntBE(value, offset[, noAssert]),写入有符号位整型数字,大端对齐 buf.writeIntLE(value, offset[, noAssert]),写入有符号位整型数字,小端对齐 buf.writeIntBE(value, offset, byteLength[, noAssert]),以下便不再累述 buf.writeIntLE(value, offset, byteLength[, noAssert]) buf.writeUInt8(value, offset[, noAssert]) buf.writeUIntBE(value, offset[, noAssert]) buf.writeUIntLE(value, offset[, noAssert]) buf.writeUIntBE(value, offset[, noAssert]) buf.writeUIntLE(value, offset[, noAssert]) buf.writeUIntBE(value, offset, byteLength[, noAssert]) buf.writeUIntLE(value, offset, byteLength[, noAssert])

buffer读操作由read开头的api完成,主要有以下这些:

buf.readDoubleBE(offset[, noAssert]) buf.readDoubleLE(offset[, noAssert]) buf.readFloatBE(offset[, noAssert]) buf.readFloatLE(offset[, noAssert]) buf.readInt8(offset[, noAssert]) buf.readIntBE(offset[, noAssert]) buf.readIntLE(offset[, noAssert]) buf.readIntBE(offset[, noAssert]) buf.readIntLE(offset[, noAssert]) buf.readIntBE(offset, byteLength[, noAssert]) buf.readIntLE(offset, byteLength[, noAssert]) buf.readUInt8(offset[, noAssert]) buf.readUIntBE(offset[, noAssert]) buf.readUIntLE(offset[, noAssert]) buf.readUIntBE(offset[, noAssert]) buf.readUIntLE(offset[, noAssert]) buf.readUIntBE(offset, byteLength[, noAssert]) buf.readUIntLE(offset, byteLength[, noAssert])

使用如下所示,以无符号整型为例:

最后利用buffer读API完成一个获取PNG格式图片尺寸的小工具,在开始编码之前,先简单介绍下PNG文件组成,如下所示:

PNG文件标志 PNG数据块 …… PNG数据块

这里我们只要用到PNG文件标识和PNG数据块的第一个块IHDR文件头数据块。文件标识是固定的8个字节,为 4E 0D 0A 1A 0A,IHDR数据块的长度为个字节,格式如下:

域的名称 字节数 说明 Width 4 bytes 宽度 Height 4 bytes 高度 Bit depth 1 bytes 图像深度 ColorType 1 bytes 颜色类型 Compression method 1 bytes 压缩方法 Filter method 1 bytes 滤波器方法 Interlace method 1 bytes 隔行扫描方法

开始编码,如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node png.js .png 下载.png .png的尺寸为:x下载.png的尺寸为:x

标签: 浅谈特殊儿童的融合教育论文

本文链接地址:https://www.jiuchutong.com/biancheng/374105.html 转载请保留说明!

上一篇:nodejs连接mongodb数据库实现增删改查(nodejs连接sqlserver数据库)

下一篇:浅谈Node.js:理解stream(node.js底层原理)

  • 自来水水费增值税发票票样
  • 计算增值税时要包括关税吗
  • 报税是怎么操作的
  • 典当行借款合同需交印花税吗
  • 债权投资产生的利息调整包括哪些内容
  • 企业专家咨询费标准
  • 应付账款坏账了怎么处理
  • 所得税费用在利润表中应在税金及附加项目中填列
  • 购买完货物又退回怎么办
  • 以前没有计提增值税吗
  • 企业自建厂房转让如何计算增值税
  • 增值税税控系统专用设备抵减增值税
  • 认可的发票验证怎么弄
  • 简易征收不动产租赁税率是多少
  • 营改增后工业企业税率是多少?
  • 土地增值税成本扣除项目
  • 生产企业销售原材料所取得的收入属于( )
  • 非居民个人所得税税率表2021
  • 计提本季度所得税会计分录
  • 公司内部银行往来款会计分录
  • 股东赠与计入资本公积,交税
  • 专项应付款形成资产怎么处理账?
  • 计提折旧会计分录的借方不可能是
  • 业务招待住宿费发票可以抵扣进项税吗
  • 应收票据借贷方核算什么内容
  • 减税降费是针对个人还是企业
  • 个税的适用税率有哪些
  • pop3服务是什么
  • win10 打开远程连接
  • 固定资产增加应计入什么
  • 契税计税依据及计算方式
  • php验证码显示不出来
  • 1558伊丽莎白女王
  • 阿根廷圣克鲁斯省
  • 计提企业税费和缴纳分录怎么做
  • 保安行业税率是多少
  • 遍历enumeration
  • php使用正则表达式检测是否包含非数字
  • 资产评估属于什么科目
  • 企业账户有什么好处
  • 企业自行清算的条件是什么
  • 小微企业所得税优惠政策最新2022
  • 信息技术服务是什么公司
  • 电信收款收据可以入账吗
  • 兼职费用怎么入账报销
  • 现金劳务收入会计分录
  • 富文本功能
  • mongodb aggregate count
  • mysql线程数配置
  • mongodb win7
  • 其他收益在利润表中的位置
  • 印花税怎么申报2023
  • 工地装饰工程包括哪些
  • 支出金额是什么
  • 增值税发票用完后如何领取新的
  • 资产负债表应付职工薪酬是负数是什么原因
  • 自产产品用于职工福利按什么价格
  • 会计核算的内容包括
  • 纳税申报表多缴了怎么办
  • 招标代理服务费取费标准
  • 建筑业建议
  • 员工出差的餐费可以抵扣吗
  • 原材料可以不设明细吗?
  • 账簿按账页格式排序
  • oracle忘记用户名密码怎么办
  • pe下修改windows下的盘符
  • 安装win7需要激活吗
  • speedupmypc.exe - speedupmypc是什么进程
  • win7系统自带游戏在哪
  • linux yum安装软件命令
  • win7升级到win10有无影响
  • dmg是啥文件
  • 简单的jquery插件实例
  • div display inline-block
  • pip工具安装
  • Javascript & DHTML 实例编程(教程)(四)初级实例篇2—动画
  • 药店买药开票吗
  • 第十三个人
  • 上海市税务局发票怎么开
  • 预交增值税附加税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设