iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >使用node.js中的Buffer类处理二进制数据的方法
  • 323
分享到

使用node.js中的Buffer类处理二进制数据的方法

二进制数方法node 2022-06-04 17:06:12 323人浏览 安东尼
摘要

前言 在node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。这篇文章就详细介绍了node.js中的Buffer类处理二进制数据的方法,下面话不多说,来看看详细的介绍。 创

前言

node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。这篇文章就详细介绍了node.js中的Buffer类处理二进制数据的方法,下面话不多说,来看看详细的介绍。

创建Buffer对象

第一种:直接使用一个数组来初始化缓存区


var arr = [0,1,2]
var buf = new Buffer(arr)
console.log(buf)

执行效果:

查看图片

第二种:直接使用一个字符串来初始化缓存区


var str = 'hello'
var buf = new Buffer(str)
console.log(buf)

执行效果:

查看图片

在Node.js中,将自动执行字符串的输入输出时的编码与解码处理,默认使用UTF8编码。

Buffer对象与字符串对象之间的相互转换

(1)toString

可以使用Buffer对象的toString方法将Buffer对象中保存的数据转换为字符串,使用方法如下:


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

可选参数1:用于指定Buffer对象中保存的文字编码格式,默认参数为UTF8。

可选参数2:指定被转换数据的起始位置,以字节为单位。

可选参数3:指定被转换数据的终止位置,以字节为单位。

示例代码如下:


var buf = new Buffer('阁下何不随风起')
console.log(buf)
console.log(buf.toString('utf8',9,12))
console.log(buf.toString('utf8',12,buf.length))

效果如下:

查看图片

控制台

(2)write

有时我们需要向已经创建的Buffer对象写入字符串,这时可以使用该Buffer对象的write方法。


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

必须参数1:指定需要写入的字符串

可选参数2-3:指定字符串转换为字节数据后的写入位置,字节数据的书写位置为从第1+offset个字节开始到offset+length个字节为止。

可选参数4:编码格式,默认utf8

代码如下:


var buf = new Buffer('阁下何不随风起')
buf.write('扶摇直上千万里',0,buf.length)
console.log(buf.toString())

运行效果如下:

查看图片
控制台

(3)StringDecoder对象

在Node.js中,也可以使用StringDecoder对象将Buffer对象中的数据转换为字符串,该对象的作用与Buffer对象的toString方法的作用相同,但是对于utf8编码格式的字符串提供了更好的支持。

在使用StringDecoder对象时,首先需要加载Node.js中的string_decoder模块,方法如下:


var StringDecoder = require('string_decoder').StringDecoder

在加载了string_decoder模块后,可以创建一个StringDecoder对象,方法如下:


var decoder = new StringDecoder([encoding])

在需要将Buffer对象中的数据转换为字符串时,可以使用StringDecoder对象的write方法,write方法中可以使用一个参数,用于指定需要被转换的Buffer对象,该方法会返回转换后的字符串,代码如下:


decoder.write(buffer)

好,来对比一下Buffer对象的toString方法和StringDecoder的write方法究竟谁对utf8支持的更好。

Buffer的toString方法如下:


//在UTF-8编码格式下,将1个文字转换为多个字节
var buf = new Buffer('阁下何不随风起')
console.log(buf)

//0x是我手动加的
var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd])
console.log(str1.toString())

var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7])
console.log(str2.toString())

运行效果如下:

查看图片
控制台

当然,也可以用如下方法将两个buffer对象连接起来后再使用toString方法将其中的数据转换为字符串,但是当Buffer对象的长度较大时,这种操作的性能将会变得比较地下。


Buffer.concat([str1,str2]).toString()

StringDecoder的write方法如下:


//在UTF-8编码格式下,将1个文字转换为多个字节
var buf = new Buffer('阁下何不随风起')
console.log(buf)

//StringDecoder
var StringDecoder = require('string_decoder').StringDecoder
var decoder = new StringDecoder()

//0x是我手动加的
var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd])
console.log(decoder.write(str1))

var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7])
console.log(decoder.write(str2))

运行效果如下:

查看图片
控制台

谁支持的更好一眼就可以看出来了。

Buffer对象与JSON对象之间的相互转换

在Node.js中,可以使用JSON.stringify方法将Buffer对象中保存的数据转换为一个字符串,也可以使用JSON.parse方法将一个经过转换后的字符串还原为一个数组

复制缓存数据

当需要将Buffer对象中保存的二进制数据复制到另一个Buffer对象中时,可以使用Buffer对象的copy方法,copy方法的使用方法如下:


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

必须参数1:指定复制的目标Buffer对象

可选参数2:指定目标Buffer对象中从第几个字节开始写入数据

可选参数3:指定从复制源Buffer对象中获取数据时的开始位置,默认0

可选参数4:指定从复制源Buffer对象中获取数据时的结束位置,默认值为复制源对象的长度

示例代码如下:


//目标:将buf1 Buffer对象中的内容复制到buf2 Buffer对象中
//复制的目标起始位置为buf2 Buffer对象中的第11个字节处(第11个字节出开始写入)
var buf1 = new Buffer('阁下何不随风起')
console.log(buf1)
var buf2 = new Buffer(128)
buf2.fill(0)
console.log(buf2)

//关键代码
buf1.copy(buf2,10)

//输出复制后的buf2
console.log(buf2)

//以字符串的形式打印buf2
var StringDecoder = require('string_decoder').StringDecoder
var decoder = new StringDecoder()
console.log(decoder.write(buf2))

运行效果如下:

查看图片
控制台

Buffer类的类方法

(1)isBuffer方法

用于判断一个对象是否为一个Buffer对象,使用方法如下:


Buffer.isBuffer(objc)

示例代码如下:


var a = 'abcde'
var b = new Buffer(10)

console.log(typeof a)
console.log(typeof b)
console.log('---我是奇妙的分隔符----')
console.log(Buffer.isBuffer(a))
console.log(Buffer.isBuffer(b))

运行结果:

查看图片
控制台

(2)byteLength方法

可以使用ByteLength方法计算一个指定字符串的字节数,使用方法如下:


Buffer.byteLength(string,[encoding])

必须参数1:指定需要计算字节数的字符串

可选参数2:编码格式,默认utf8

示例代码如下:


var str = '阁下何不随风起'
console.log(str.length)
console.log(Buffer.byteLength(str,'utf8'))
console.log(Buffer.byteLength(str,'base64'))
console.log(Buffer.byteLength(str,'utf16le'))

运行结果如下:

查看图片
控制台

(3)isEncoding方法

isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串。使用方法如下:


Buffer.isEncoding(encoding)

在isEncoding方法中,使用一个参数,用于指定需要被检测的字符串,如果该字符串为有效的编码格式字符串,则方法返回true,如果该字符串不是一个有效的编码格式字符串,则方法返回false。

示例代码如下:


var str1 = 'utf8'
console.log(Buffer.isEncoding(str1))
var str2 = 'utf16le'
console.log(Buffer.isEncoding(str2))
var str3= 'utf16e'
console.log(Buffer.isEncoding(str3))

运行效果如下:

查看图片
控制台

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

--结束END--

本文标题: 使用node.js中的Buffer类处理二进制数据的方法

本文链接: https://www.lsjlt.com/news/12869.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js处理I/O数据之使用Buffer模块缓冲数据
    一、前传 在之前做web时也经常用到js对象转json和json转js对象.既然是Node.js处理I/O数据,也把这个记下来。 Json转Js对象:JSON.parse(jsons...
    99+
    2024-04-02
  • C#处理类型和二进制数据转换并提高程序性能的方法
    这篇“C#处理类型和二进制数据转换并提高程序性能的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#处理类型和二进制数据...
    99+
    2023-06-29
  • Golang函数的二进制和十六进制数据处理技巧
    首先,为了更好地理解Golang函数对二进制和十六进制数据的处理技巧,我们需要先明确一下二进制和十六进制的基础知识。二进制,也叫做基数为2的进制,是计算机系统内部最常用的数字表示方式。在二进制中,每个位上的值只有0和1两种可能,例如1011...
    99+
    2023-05-17
    Golang 二进制数据处理 十六进制数据处理
  • Node.js WebSocket中的二进制数据传输是怎么实现的?
    当客户端和服务器建立WebSocket连接后,它们就可以通过WebSocket流式传输机制互相发送和接收数据。这个流式传输机制使用TCP协议作为底层传输层,因此它支持二进制数据传输。 为了发送二进制数据,应用程序可以使用Node.js的...
    99+
    2024-02-06
    WebSocket, 二进制数据, Node.js, Buffer API
  • Redis中如何处理二进制序列化数据
    在Redis中处理二进制序列化数据通常使用二进制安全字符串来存储数据。Redis的字符串值是二进制安全的,可以存储任意类型的数据,包...
    99+
    2024-04-29
    Redis
  • 在JavaScript中Node.js处理数据IO的方法是什么
    本篇内容主要讲解“在JavaScript中Node.js处理数据IO的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在JavaScript中Node....
    99+
    2024-04-02
  • python3使用mutagen进行音频元数据处理的方法
    目录一、安装1、在线安装2、离线安装2.1 下载离线安装文件 2.2  执行离线安装操作 二、基础用法1、获取音频文件元数据  2、...
    99+
    2024-04-02
  • Mysql数据库二进制日志的管理
    如果配置了log_bin参数,则需要配置expire_logs_days参数指定二进制日志保留时间,不然磁盘空间早晚会被日志占满的。如果之前没有配置,则配置步骤如下:   1、查...
    99+
    2024-04-02
  • ASP 中如何使用二维码 API 处理不同类型的数据?
    随着智能手机的普及,二维码已经成为了一种非常方便的信息识别方式。在 ASP 中,我们可以使用二维码 API 来处理不同类型的数据,例如 URL、文本、电话号码等。本文将介绍如何使用二维码 API 在 ASP 中生成和识别二维码,并且提供相...
    99+
    2023-07-08
    二维码 api 数据类型
  • 处理不同数据类型的方法
    在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《处理不同数据类型的方法》就很适合你!本篇内容主要包括##content_title#...
    99+
    2024-04-04
  • 如何在 ASP 中使用二维码 API 进行数据类型转换和处理?
    在 ASP 中使用二维码 API 进行数据类型转换和处理是一个非常重要的技能。二维码作为一种便捷的信息交流方式,在移动互联网时代得到了广泛的应用。因此,在开发 ASP 网站时,如何使用二维码 API 进行数据类型转换和处理,是一个必须掌握的...
    99+
    2023-07-08
    二维码 api 数据类型
  • Go语言中16进制转二进制的实现方法
    Go语言是一种高效、简洁的编程语言,广泛应用于各种领域。在Go语言中,我们经常会遇到需要进行进制转换的情况,比如将16进制数转换为二进制数。在这篇文章中,我们将介绍如何在Go语言中实现...
    99+
    2024-04-02
  • python3文件处理中的二进制写入的问
    #之前一直没明白文件处理中的w和wb的区别到底是什么,#在看过视频后才知道,原来在linux里面是没有区别的,#但是在windows里面就能够看出区别来了#下面来个例子: with open("普通文本文件.txt", "w",encod...
    99+
    2023-01-31
    文件
  • C#处理类型和二进制数据转换并提高程序性能
    目录C# 原语类型1,利用 Buffer 优化数组性能2,BinaryPrimitives 细粒度操作字节数组提高代码安全性3,BitConverter、MemoryMarshal4...
    99+
    2024-04-02
  • Golang中map数据类型的使用方法
    目录前言案例mapmap定义map声明map的操作总结前言 今天咱们来学习一下golang中的map数据类型,单纯的总结一下基本语法和使用场景,也不具体深入底层。map类型是什么呢?...
    99+
    2024-04-02
  • 负数的二进制表示方法是什么
    本篇内容介绍了“负数的二进制表示方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原码:一个整数,按照绝对值大小转换成的二进制数,称为...
    99+
    2023-06-04
  • 在QlikView中使用Neo4j处理图形数据的方法
    这篇文章主要介绍在QlikView中使用Neo4j处理图形数据的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  图形数据库是使用带有节点、边缘和属性的图结构来对数据进行存储和展...
    99+
    2024-04-02
  • RiSearch PHP 实现二进制数据搜索的技术原理与实现方法
    摘要:RiSearch 是一个快速、高效的全文搜索引擎。本文将介绍如何使用 RiSearch PHP 扩展来实现对二进制数据的搜索。我们将讨论 RiSearch 的技术原理、代码示例以及一些实现方法。RiSearch 技术原理RiSearc...
    99+
    2023-10-21
    PHP RiSearch 二进制数据搜索
  • Python使用Kafka处理数据的方法详解
    目录一、安装Kafka-Python包二、生产者三、消费者四、批量发送和批量消费五、总结Kafka是一个分布式的流数据平台,它可以快速地处理大量的实时数据。Python是一种广泛使用...
    99+
    2023-05-16
    Python Kafka处理数据 Python Kafka数据 Python 处理数据 Python Kafka
  • Python使用Pandas处理测试数据的方法
    目录Python自动化测试-使用Pandas来高效处理测试数据一、思考1.Pandas是什么?2.经典面试题二、使用pandas来操作Excel文件1.安装2.按列读取数据3.按行读...
    99+
    2023-02-21
    Python Pandas 处理测试数据 Python Pandas 自动化测试
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作