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日

相关文章

  • Nodejs 发布自己的npm包并制作成命令行工具的实例讲解

    下面将详细讲解如何发布自己的npm包并制作成命令行工具的步骤: 准备工作 安装Node.js环境 注册npm账号或者使用已有的npm账号 发布npm包 创建一个文件夹,命名为my-package(名字可以自己定义)。 在my-package文件夹下创建一个package.json文件。 { "name": "my-package…

    node js 2023年6月8日
    00
  • node.js中的fs.fsync方法使用说明

    node.js中的fs.fsync方法使用说明攻略 简介 fs.fsync() 方法用于将缓存中的文件数据同步到磁盘中。 它是 fs.writeFile() 和 fs.WriteStream 在关闭后自动调用的方法。 但是,这并不保证所有数据都已写入磁盘。 要检查数据是否已完全写入磁盘,可以使用此方法。 语法 fs.fsync(fd,[callback]) …

    node js 2023年6月8日
    00
  • nodejs抓取notion emoji svg资源的脚本示例

    下面我会详细讲解“nodejs抓取notion emoji svg资源的脚本示例”的完整攻略。 1. 了解notion emoji svg资源 在开始编写脚本之前,我们需要了解一下notion的emoji svg资源。notion的emoji svg资源储存在以下网址中: https://www.notion.so/emoji/.svg 其中,是emoji的…

    node js 2023年6月8日
    00
  • VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决

    针对“VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误”的解决,可以按以下步骤进行: 问题分析 白屏报错 SCRIPT1002: 语法错误,是IE11对于语法不支持的情况下的报错信息。VUE项目在IE11中常遇到此类问题,通常是由于ES6语法不被IE11所支持而导致。因此,我们需要对VUE项目中涉及到的ES6语法进行转换或降级。 解决方案 安…

    node js 2023年6月8日
    00
  • nodejs中解决异步嵌套循环和循环嵌套异步的问题

    在Node.js中,异步嵌套循环和循环嵌套异步是一个常见的问题。这会导致代码难以理解、维护和调试。以下是在Node.js中解决异步嵌套循环和循环嵌套异步的完整攻略。 解决异步嵌套循环的问题 当我们需要在循环内部调用异步函数时,很容易出现异步嵌套循环的问题。以下是一个示例: for (var i = 0; i < 10; i++) { asyncFunc…

    node js 2023年6月8日
    00
  • npm ERR! code 128的错误问题解决方法

    下面是“npm ERR! code 128的错误问题解决方法”的完整攻略。 问题描述 在使用npm安装/更新模块时,有时会遇到如下错误: npm ERR! code 128 npm ERR! Command failed: git clone –depth=1 -q https://github.com/xxx/xxx.git /Users/xxx/.np…

    node js 2023年6月8日
    00
  • Node.js readline模块与util模块的使用

    Node.js中的readline模块和util模块是常见的核心模块,用于处理控制台输入输出和各种工具函数的使用,我们通常会在Node.js CLI程序中使用到它们,接下来我将为您介绍它们的使用方法。 readline模块的使用 readline模块提供了一些实用工具,可以从流中读取数据,读取过程是逐行进行的,通常读取标准输入流中的数据。下面是readlin…

    node js 2023年6月8日
    00
  • express框架通过ejs模板渲染输出页面实例分析

    我会为你详细讲解“express框架通过ejs模板渲染输出页面实例分析”的完整攻略。该攻略的过程将介绍express框架如何使用ejs模板引擎来渲染页面模板并输出页面。 环境准备 在开始攻略之前,我们需要准备好以下环境: Node.js环境(建议使用最新版) npm包管理器(通常与Node.js环境一起安装) 一个文本编辑器(如:VS Code) 安装和配置…

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