NodeJS3-2基础API----Buffer(缓冲器)

2023-12-29 16:58

本文主要是介绍NodeJS3-2基础API----Buffer(缓冲器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Buffer(缓冲器)

  • Buffer是用于处理二进制数据流的
  • 实例类似整数数组,大小固定(实例化之后,是多大就多大,不能进行变更)
  • C++代码在V8 对外分配物理内存
  • Buffer是全局变量,没必要使用require来引用
//常见一个规定长度,默认用0填充
console.log(Buffer.alloc(10));
console.log(Buffer.alloc(20));
// 用2填充
console.log(Buffer.alloc(5,2));
// 创建一个长度为 5、且未初始化的 Buffer。这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,因此需要使用 fill() 或 write() 重写。
console.log(Buffer.allocUnsafe(5,2));
console.log(Buffer.from([1,2,3]));
console.log(Buffer.from('test'));
//指定编码
console.log(Buffer.from('test','base64'));

运行结果

静态的属性和方法(Buffer类本身的属性和方法)[常用的]

Buffer.byteLength & Buffer.isBuffer() & Buffer.concat()

// 实际占了几个字节
console.log(Buffer.byteLength('test'));
//一个中文三个字节
console.log(Buffer.byteLength('测试'));
console.log(Buffer.isBuffer({}));
console.log(Buffer.isBuffer(Buffer.from([1,2,3])));
const buf1 = Buffer.from('This')
const buf2 = Buffer.from(' is ')
const buf3 = Buffer.from('a ')
const buf4 = Buffer.from('test ')
const buf5 = Buffer.from('!')
const buf = Buffer.concat([buf1,buf2,buf3,buf4,buf5])
console.log(buf.toString());

运行结果:

实例的常用属性和方法(6种)

buf.length      buf.toString()     buf.fill()

buf.equals()   buf.indexOf()      buf.copy()

//1.buf.length     
const buf = Buffer.from('This is a test!')
console.log(buf.length); //15
const buf2 = Buffer.alloc(10);
const buf3 = Buffer.allocUnsafe(10); //默认不填充
buf2[0]=2
//下面证明,就算默认不填充,可是长度是根据你一开始创建的大小来控制,与填不填充内容无关
console.log(buf2.length); //10
console.log(buf3.length); //10
//2.buf.toString() 
console.log(buf.toString()); //默认utf-8 This is a test
console.log(buf.toString('base64')); //VGhpcyBpcyBhIHRlc3Qh
//3.buf.fill() alloc是自动填充0,但是可以用fill()来填充其他的值
const buf4 = Buffer.allocUnsafe(10)
console.log(buf4);
console.log(buf4.fill(10,2,6));//fill(像填充的内容,从哪里开始,从哪里结束) 
//4.buf.equals()  两个Buffer的内容是否相等
const buf5  = Buffer.from('test')
const buf6  = Buffer.from('test')
const buf7  = Buffer.from('test!')
console.log(buf5.equals(buf6)); //true
console.log(buf5.equals(buf7)); //false
//5.buf.indexOf() buf5=test
console.log(buf5.indexOf('s')); //找到就返回所在位置的index(从0开始)
console.log(buf5.indexOf('a'));//找不到就返回-1
//6.buf.copy()
const buf8 = Buffer.allocUnsafe(10).fill('*')
const buf9 = Buffer.allocUnsafe(10).fill('!')
//拷贝'buf8'中第 3-6字节数据到'buf9'第4个偏移量开始
buf8.copy(buf9,4,3,6)
console.log(buf9.toString()); // !!!!***!!!
//乱码
const StringDecoder = require('string_decoder').StringDecoder
//自定义的decoder
const decoder = new StringDecoder('utf8')
const buf = Buffer.from('中文字符串!');
for(let i =0 ;i<buf.length ; i+=5){
const b = Buffer.allocUnsafe(5)
buf.copy(b,0,i)
console.log(b.toString());//乱码
}
for(let i =0 ;i<buf.length ; i+=5){
const b = Buffer.allocUnsafe(5)
buf.copy(b,0,i)
//用decoder来打印,决定打印的内容
console.log(decoder.write(b)); //没有乱码
}
//decoder并不会意识到自己处理中文(宽字节),
 

这篇关于NodeJS3-2基础API----Buffer(缓冲器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550080

相关文章

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Go 1.23中Timer无buffer的实现方式详解

《Go1.23中Timer无buffer的实现方式详解》在Go1.23中,Timer的实现通常是通过time包提供的time.Timer类型来实现的,本文主要介绍了Go1.23中Timer无buff... 目录Timer 的基本实现无缓冲区的实现自定义无缓冲 Timer 实现更复杂的 Timer 实现总结在

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最