NodeJS中Buffer模块详解

首先我们来了解一下NodeJS中Buffer模块的基础知识。

什么是Buffer

在Node.js中,Buffer 对象用于表示固定长度的二进制数列,它可以存储各种数据(包括字符串、JSON、二进制数据等)。

我们可以将其看做一个 JavaScript 的数组,用于存储字节数据(byte)。与数组不同的是,Buffer 分配的是堆内存,因此可以被直接用于 I/O 操作。

Buffer 对象在 V8 堆外分配物理内存,这是因为在 V8 堆中分配的对象受到内存限制(通常为 1.4GB)的限制。

通常我们会使用以下两种方式来创建一个 Buffer 对象:

  • 通过 Buffer.alloc(size) 创建一个长度为 size 字节的 Buffer 对象。
  • 通过 Buffer.from(data) 创建包含 data 的 Buffer 对象。

下面,我们通过实例来进一步了解 Buffer 的用法。

创建 Buffer 对象

我们通过以下代码来演示如何创建一个 Buffer 对象,并输出其内容:

const buf1 = Buffer.alloc(10); // 创建一个长度为 10 的 Buffer 对象
console.log(buf1); // <Buffer 00 00 00 00 00 00 00 00 00 00>

const buf2 = Buffer.from('hello'); // 通过字符串创建一个 Buffer 对象
console.log(buf2); // <Buffer 68 65 6c 6c 6f>
console.log(buf2.toString()); // 输出 'hello'

可以看到,当我们创建一个长度为 10 的 Buffer 对象时,其元素值均为 0。而对于通过字符串创建的对象,则会显示字符串中每个字符的 ASCII 码值。通过 buf2.toString() 可以将其解码为字符串类型。

写入与读取

我们可以使用 Buffer 对象的 write 和 read 方法在存储器和 I/O 操作中读写数据,下面我们通过一个文件读写的例子来进一步了解这个方法。

const fs = require('fs');
const buf = Buffer.alloc(1024);

console.log('准备读取文件...');

fs.open('input.txt', 'r+', (err, fd) => { 
   if (err) {
      return console.error(err);
   } 
   console.log('文件打开成功!');
   console.log(`准备读取 ${buf.length} bytes 的数据...`);

   fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
      if (err) {
         console.log(err);
      }

      // 输出读取的字节
      if (bytes > 0) {
         console.log(buf.slice(0, bytes).toString());
      }

      // 关闭文件
      fs.close(fd, (err) => {
         if (err){
            console.log(err);
         } 
         console.log("文件已关闭。");
      });
   });
});

在代码中,我们使用了 fs 模块的 open 方法打开一个名为 'input.txt' 的文件,并使用 fs.read 方法从文件中读取数据,调用函数的参数依次为:文件描述符、缓冲区对象、读取字节长度、读取起点、回调函数;最后通过 fs.close 方法关闭文件。在控制台中运行代码时,我们可以看到读取文件内容的输出。

通过以上对 Buffer 模块的讲解,我们可以看出,它在后端编程中很有用,尤其在处理流数据和网络传输等方面都有很多应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJS中Buffer模块详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 浅谈如何把Node项目部署到服务器上

    让我来详细讲解如何把Node项目部署到服务器上的完整攻略。这里将分为以下步骤: 在服务器上安装Node.js,可以通过以下命令安装: $ sudo apt-get update $ sudo apt-get install nodejs 在服务器上安装Nginx,可以通过以下命令安装: $ sudo apt-get install nginx 配置Nginx…

    node js 2023年6月8日
    00
  • 浅谈Nodejs应用主文件index.js

    下面我来详细讲解“浅谈Nodejs应用主文件index.js”的完整攻略。 在Node.js中,应用程序的主要或入口文件通常被命名为index.js。这个文件是应用程序的主要控制器。在index.js文件中,定义和处理应用的各种功能。 下面就是index.js的基本结构: const express = require(‘express’); const a…

    node js 2023年6月8日
    00
  • JavaScript模仿Pinterest实现图片预加载功能

    下面详细讲解“JavaScript模仿Pinterest实现图片预加载功能”的完整攻略。 1. 什么是图片预加载 图片预加载是在加载网页时,提前将图片资源加载到本地缓存中,等到需要显示的时候直接从本地缓存调用,从而提高网页的加载速度和用户体验。 2. 实现图片预加载的方法 实现图片预加载有多种方法,下面介绍一种比较常用的方法: 2.1 创建一个Image对象…

    node js 2023年6月8日
    00
  • Node.JS更改Windows注册表Regedit的方法小结

    按照你的要求,我来详细讲解一下“Node.JS更改Windows注册表Regedit的方法小结”的完整攻略。 目录 介绍 使用Node.js修改Windows注册表 安装必要模块 读取注册表 写入注册表 删除注册表 示例说明 示例1: 修改注册表键值 示例2: 删除注册表项 介绍 Windows系统中的注册表是系统的关键组件之一,管理着许多应用程序和操作系统…

    node js 2023年6月8日
    00
  • nodejs 十六进制字符串型数据与btye型数据相互转换

    要将数字或者字符串转换为十六进制字符串,Node.js提供了toString()方法,而将十六进制字符串转换为byte型数据可以借助Buffer类的构造函数。 以下是 nodejs 十六进制字符串型数据与 byte型数据相互转换的完整攻略: 将byte型数据转换为十六进制字符串 使用 toString() 将二进制数据转换为十六进制字符串: const by…

    node js 2023年6月8日
    00
  • 原生js实现的移动端可拖动进度条插件功能详解

    下面我将为您详细讲解 “原生js实现的移动端可拖动进度条插件功能详解” 的完整攻略。 插件功能介绍 本插件是一个移动端可拖动进度条插件,能够在移动端非常友好地实现拖动操作,并且可以支持自定义前景色、后景色等。通过本插件,我们可以快速地为我们的移动端网页添加进度条的功能,大大提升了用户体验度。 实现思路 本插件的实现主要是通过原生JS来实现的,其具体实现思路如…

    node js 2023年6月8日
    00
  • Node中解决接口跨域问题详解

    接口跨域问题在日常的Web开发中经常会遇到,下面我会给出一个完整的攻略来解决这个问题。 背景 在前端的开发过程中,我们一般会从服务器获取数据来展示在页面上,这时候就涉及到跨域访问的问题。比如在本地开发环境中,我们需要获取外部API的数据,但是由于浏览器的同源策略限制,我们不能直接在本地使用跨域的API。 解决方案 在Node中解决跨域问题主要有以下几个方案:…

    node js 2023年6月8日
    00
  • koa2实现登录注册功能的示例代码

    下面是针对“koa2实现登录注册功能的示例代码”的完整攻略。 前置要求 在编写示例代码之前,需要对以下内容有一定的了解: koa2框架的基础知识 MySQL数据库的基础知识及操作方法 bcrypt加密技术的基础知识 如果对以上内容不熟悉,可以先查阅相关资料进行学习。 步骤1:创建数据库 在MySQL中创建一个名为“users”的数据库,其中包含以下两个表: …

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部