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.js的events.EventEmitter用法介绍

    关于Node.js的events.EventEmitter用法介绍,我们可以从以下几个方面进行详细讲解。 一、events.EventEmitter介绍 在 Node.js 中,events 模块是 Node.js 模块库的核心之一,它提供了一个简单的事件发射和监听器模式的实现。通过 events 模块,可以方便地进行异步事件的处理。 events.Even…

    node js 2023年6月8日
    00
  • 在Express中提供静态文件的实现方法

    在Express中提供静态文件可通过以下步骤实现: 步骤一:安装Express依赖 在项目根目录下执行如下命令进行安装: npm install express –save 步骤二:创建Express应用 创建一个名为app.js的文件,并添加以下代码: const express = require("express"); const…

    node js 2023年6月8日
    00
  • java实现单链表增删改查的实例代码详解

    Java实现单链表增删改查的实例代码详解 单链表是一种常见的数据结构,它由多个节点组成,每个节点包含一个值和一个指针,指向下一个节点。单链表可以用于实现栈、队列等数据结构。 在Java中,我们可以使用类来表示一个单链表。下面是单链表节点类的示例代码: class ListNode { int val; ListNode next; ListNode(int …

    node js 2023年6月8日
    00
  • 深入理解JS异步编程-Promise

    深入理解JS异步编程-Promise 在JavaScript中,由于单线程的特点,异步编程是非常必要的。Promise是一种用于异步编程的解决方案,它可以让异步操作更加清晰、流畅,避免回调地狱的情况。本文将从Promise的基本用法、Promise链、Promise的一些方法等方面,对Promise进行深入讲解。 Promise的基本用法 Promise是一…

    node js 2023年6月8日
    00
  • JS获取网址中指定值的正则函数

    获取网址中指定值的功能是前端开发中常用的功能之一。可以利用正则表达式(RegExp)对URL字符串进行解析得到所需的参数。下面是完整的攻略: 1. 获取网址中指定值的正则函数 首先定义一个名为getQueryString的函数,传入两个参数:网址URL和要查询的参数名称。 function getQueryString(url, name) {} 在函数内部…

    node js 2023年6月8日
    00
  • 通过实例了解Nodejs模块系统及require机制

    让我来详细讲解“通过实例了解Nodejs模块系统及require机制”的完整攻略。我会通过两个示例来说明。 一、Node.js 模块系统 在 Node.js 中,模块是一个具有封装性和复用性的单位,它将包含 JavaScript 函数或对象的单个文件定义为独立的模块。这里我们通过一个实例来了解 Node.js 的模块系统。 首先,创建一个名为 math.js…

    node js 2023年6月8日
    00
  • Node 切片拼接及地图导出实例详解

    Node 切片拼接及地图导出实例详解 本文将介绍如何使用 Node.js 实现切片拼接和地图导出功能。 准备工作 在开始操作之前,需要先安装以下两个模块: gm:该模块用于处理图像,可以用来进行图像拼接。 mapnik:该模块为 Node.js 提供了一个与 Mapnik 库交互的接口,可以用来生成地图。 可以使用以下命令行进行安装: npm install…

    node js 2023年6月8日
    00
  • node.js下when.js 的异步编程实践

    Node.js下的异步编程模型是该平台的一大特点,但面对复杂的异步代码实现却造成了非常大的困难。为了解决这个问题,许多异步编程库被开发出来。其中,when.js 是一个高效的 Promise/A+ compliant 的库,允许 Node.js 开发人员用更优雅和精简的代码来解决异步代码的问题。下面,我将分享一份when.js的异步编程实践攻略。 when.…

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