Buffer类

在Node中,应用需要处理网络协议、操作数据库、处理图片、接收上传文件等,在网络流和文件的操作中,还要处理大量二进制数据,Buffer类被引入作为NodejsAPI的一部分,使其可以在TCP流和文件系统操作等场景中处理二进制数据流。
Buffer是一个典型的JavaScript与C++结合的模块,它将性能相关部分用C++实现,将非性能相关的部分用JavaScript实现。Buffer的本质就是字节数组。
因为Buffer在全局对象global上,因此无需通过require()引入,就可以直接使用。

实例化

在旧版本中使用Buffer的构造函数进行实例化,虽然速度较快,但是包含旧的数据,不够安全。

 let buf = new Buffer(5);console.log(buf);//<Buffer 00 00 00 00 00>

新版本中使用Buffer.alloc(size[, fill[, encoding]])代替,来分配一个大小为 size 字节的新建的没有用0填充的Buffer,encoding为字符编码,默认为utf-8。

  • Buffer.alloc(size[, fill[, encoding]])
 let buf = Buffer.alloc(5);console.log(buf);//<Buffer 00 00 00 00 00>
  • Buffer.allocUnsafe(size)
    以这种方式创建的 Buffer 实例的底层内存是未初始化的。 新创建的 Buffer 的内容是未知的,可能包含敏感数据。
 let buf = Buffer.allocUnsafe(5);console.log(buf);//<Buffer 48 2a 59 31 00>
  • Buffer.from(array),使用八位字节数组 array 分配一个新的 Buffer。
 let buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);console.log(buf.toString());//buffer
  • Buffer.from(string[, encoding]),创建一个包含 string 的新 Buffer。 encoding 参数指定 string 的字符编码。
 let buf = Buffer.from('hello','utf8');console.log(buf);//<Buffer 68 65 6c 6c 6f>

功能方法

  • Buffer.byteLength(string[, encoding]),返回字符串的实际字节长度。
 let buf = Buffer.from("中国");console.log(Buffer.byteLength(buf));//6
  • Buffer.isEncoding(encoding),如果 encoding 是支持的字符编码,则返回 true,否则返回 false。
 console.log(Buffer.isEncoding('utf8'));//trueconsole.log(Buffer.isEncoding('gbk'));//false
  • Buffer.isBuffer(obj),如果 obj 是一个 Buffer,则返回 true,否则返回 false。
 let buf = Buffer.from('hello');console.log(Buffer.isBuffer(buf));//trueconsole.log(Buffer.isBuffer({}));//false
  • Buffer.concat(list[, totalLength]),返回一个合并了 list 中所有 Buffer 实例的新 Buffer。
 let buf1 = Buffer.alloc(3);let buf2 = Buffer.alloc(5);let buf3 = Buffer.concat([buf1,buf2]);console.log(Buffer.byteLength(buf3));//8

实例方法

  • buf.write(string[, offset[, length]][, encoding]),根据 encoding 指定的字符编码将 string 写入到 buf 中的 offset 位置。 length 参数是要写入的字节数。 如果 buf 没有足够的空间保存整个字符串,则只会写入 string 的一部分。 只编码了一部分的字符不会被写入。
 let buf = Buffer.alloc(5);buf.write("hello",2,3);console.log(buf);<Buffer 00 00 68 65 6c>console.log(buf.toString());//llo
  • buf.slice([start[, end]]),返回一个新的 Buffer,它引用与原始的 Buffer 相同的内存,但是由 start 和 end 索引进行偏移和裁剪。
 let buf = Buffer.from("hello");let res = buf.slice(2,4);console.log(res.toString());//ll
  • buf.toString([encoding[, start[, end]]]),根据 encoding 指定的字符编码将 buf 解码成字符串。 传入 start 和 end 可以只解码 buf 的子集。
 let buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);console.log(buf.toString());//buffer
  • buf.toJSON(),返回 buf 的 JSON 格式。 当字符串化 Buffer 实例时,JSON.stringify() 会调用该函数。
 // toJSON方法不需要显式调用,当JSON.stringify方法调用的时候会自动调用toJSON方法let buf = Buffer.from("hello");let json = JSON.stringify(buf);console.log(json);//{"type":"Buffer","data":[104,101,108,108,111]}

Blob对象

Blob全称:Binary Large Object (二进制大型对象)
Blob对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换为ReadableStream来用于数据操作。
Blob表示的不一定是JavaScript原生格式的数据。File接口基于Blob,继承了blob的功能

Buffer对象与Blob对象相关推荐

  1. HTML5 file对象和blob对象的互相转换

    使用FileReader 对象转换:File => DataURL 该对象用于读取文件(读取单个对象文件,所以,不能直接读取 Filelist 对象文件集合),即把文件内容读入内存.它接收 Fi ...

  2. h5如何上传文件二进制流_前端H5中JS用FileReader对象读取blob对象二进制数据,文件传输...

    HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍. FileReader FileReader主要用于将文件内容读入内存,通过一系 ...

  3. js二进制流转Blob对象。Blob对象再转File对象

    JavaScript 二进制转文件 使用js将blob对象转file对象 前端处理后端返回的二进制流文件 js中Blob对象一般用法 js中关于Blob对象的介绍与使用 上传的文件对象 完整代码实例 ...

  4. blob转file对象_JavaScript Blob 对象解析

    Blob是JavaScript内建对象,表示不可变的原始数据的类似文件的对象. blob是表示原始数据的不可变对象,这些数据不一定是javascript原生格式的,文件接口基于Blob,继承Blob功 ...

  5. js中关于Blob对象的介绍与使用

    js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js ...

  6. [JS进阶] JS 之Blob 对象类型

    什么是Blob? Blob 是什么? 这里说的是一种Javascript的对象类型. oracle 中也有类似的栏位类型. 在 [JS进阶] HTML5 之文件操作(file) 这一篇中用到了File ...

  7. vue.js接收并下载文件流(blob对象)

    在vue框架中,与传统的根据路径下载文件(document.getElementById("").src='')方式不同,有时候,我们会需要将上传的文件在后台直接进行处理再回传到前 ...

  8. JavaScript Blob对象

    前言 略 创建 Blob对象 var blob = new Blob(["Hello World!"],{type:"text/plain"}); consol ...

  9. js Blob对象介绍

    2019独角兽企业重金招聘Python工程师标准>>> 什么是Blob?Blob是一种JavaScript的对象类型.HTML5的文件操作对象,file对象就是Blob的一个分支或说 ...

最新文章

  1. View是如何被添加到屏幕窗口上的
  2. java中synchronized使用方法
  3. 测试ModelAttribute注解
  4. Android system server之PackageManagerService详细分析
  5. codeforces CF438D The Child and Sequence 线段树
  6. JSTL-EL表达式 函数fn
  7. Away3D 的实体收集器流程2
  8. Java将对象保存到文件中/从文件中读取对象
  9. CAD中画一条直线与两个圆相切
  10. 大话西游服务器刚维护完几率,大话西游2玩家预约凌烟阁服务器瞬间成功,这算不算被几率...
  11. 050_Scrapy 爬虫框架 案例四大名著爬取
  12. UVA1723 Intervals
  13. n719 rom 卡刷 android 4.3,三星n719卡刷刷机教程(刷第三方rom包)
  14. 容联CPO熊谢刚:“通讯+AI”打造数智化新基建
  15. 理清offsetparent()、offsetLeft/offsetTop、offset()、position()
  16. 【Hbu数据库】第七周 数据库完整性 存储过程和函数
  17. 小白也能轻松看懂的lora物联网!
  18. 射频开关常见优化技术——交流悬浮技术、MOS堆叠
  19. stata解决内生性问题--样本选择
  20. 一种低成本eDP转LVDS接口方案

热门文章

  1. matlab非线性方程组求解得到矩阵,非线性方程组求解——附Matlab原程序
  2. 服务器dir显示所有文件,Dir 命令
  3. oracle ebs系统日志,OracleEBS各个模块日志收集的方法
  4. 平级同事总是给我安排工作,怎么破?领导在群里安排工作给他,他却说病假没空,让我做
  5. 自己开发的锂电池电量显示芯片
  6. 英力士苯领60万吨ABS新厂在中国宁波开工奠基
  7. STM32F103系列USB的学习过程及使用心得(一)(概括篇)
  8. Android指示灯控制
  9. String 真的不可以改变吗?——一次动刀 String 的有趣实验
  10. 基于ThreadLocal的日期工具类