Node.js中Buffer和Stream模块如何进行深度解析与应用实践?

2026-04-01 13:011阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1230个文字,预计阅读时间需要5分钟。

Node.js中Buffer和Stream模块如何进行深度解析与应用实践?

目录+正文+写入缓冲区+从流中读取数据+管道流+链式流+模块系统+正文字符串数据类型+JavaScript语言本身只有字符串数据类型,没有二进制数据类型。+但是,在处理TCP流或文件流时,必须使用二进制数据。

目录
  • 正文
  • 写入缓冲区
  • 从流中读取数据
    • 管道流
    • 链式流
  • 模块系统

    正文

    JavaScript语言本身只有字符串数据类型,没有二进制数据类型。 但是,在处理TCP流或文件流时必须使用二进制数据。 因此,在node JS中,定义了一个缓冲区类来创建用于存储二进制数据的缓冲区。

    const buf = Buffer.from('runoob', 'ascii');

    在node JS中,缓冲区类是与node内核一起发布的核心库。 缓冲库是node JS带来的一种存储原始数据的方法,它允许节点JS。

    console.log(buf.toString('hex')); console.log(buf.toString('base64'));

    原始数据存储在buffer类的实例中。缓冲区类似于整数数组,但它对应于V8堆内存之外的一段原始内存。

    写入缓冲区

    写入 Node 缓冲区的语法如下所示:

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

    • string - 写入缓冲区的字符串。
    • offset - 缓冲区开始写入的索引值,默认为 0 。
    • length - 写入的字节数,默认为 buffer.length
    • encoding - 使用的编码。默认为 'utf8' 。

    buf = Buffer.alloc(256); len = buf.write("www.runoob.com"); console.log("写入字节数 : "+ len);

    输出为:

    $node main.js 写入字节数 : 14

    buf.write(string[, offset[, length]][, encoding]) 根据参数偏移量和指定的编码方法将参数字符串数据写入缓冲区。偏移量的默认值为0,默认编码方法为utf8。 长度是要写入的字符串的字节大小。返回数字类型,指示写入了多少8位字节流。 如果缓冲区没有足够的空间容纳整个字符串,它将只写入部分字符串。默认情况下,长度是缓冲区长度-偏移量此方法似乎无法写入某些字符。

    buf.writeDoubleBE(value, offset[, noAssert]) 根据传递的偏移量和指定的endian格式将值写入缓冲区。 注意:值必须是有效的64位双精度值。如果参数noassert为真,则不会验证值和偏移参数。 这意味着该值可能太大,或者偏移量可能超过缓冲区的末尾,从而导致丢弃该值。 默认值为false。

    从流中读取数据

    var fs = require("fs"); var data = '';

    创建可读流

    var readerStream = fs.createReadStream('input.txt');

    设置编码为 utf8。

    readerStream.setEncoding('UTF8');

    处理流事件 --> data, end, and error

    readerStream.on('data', function(chunk) { data += chunk; });

    readerStream.on('end',function(){ console.log(data); }); readerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕");

    管道流

    管道为输出流到输入流提供了一种机制。通常我们使用它从一个流中获取数据并将其传递给另一个流。 创建一个可读流

    var readerStream = fs.createReadStream('input.txt');

    创建一个可写流

    var writerStream = fs.createWriteStream('output.txt');

    管道读写操作,读取 input.txt 文件内容,并将内容写入到 output.txt 文件中。

    readerStream.pipe(writerStream);

    链式流

    链接是一种将输出流连接到另一个流并创建多个流操作链的机制。链流通常用于管道操作。 接下来,我们使用管道和链来压缩和解压缩文件。

    var fs = require("fs"); var zlib = require('zlib');

    压缩 input.txt 文件为 input.txt.gz

    fs.createReadStream('input.txt') .pipe(zlib.createGzip()) .pipe(fs.createWriteStream('input.txt.gz'));

    执行上述操作后,我们可以看到输入Txt压缩文件input.Txt.gz。 接下来,让我们解压文件并创建解压JS文件,代码如下:

    Node.js中Buffer和Stream模块如何进行深度解析与应用实践?

    var fs = require("fs"); var zlib = require('zlib');

    解压 input.txt.gz 文件为 input.txt

    fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt'));

    模块系统

    以便启用节点的文件。js相互调用,节点。js提供了一个简单的模块系统。 模块是JS应用程序的基本组件,文件和模块是一一对应的。 换句话说,node JS文件是一个模块。该文件可以是JavaScript代码、JSON或编译的C/C++扩展。 hello.js

    function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; };

    模块接口中唯一的变化是使用模块Exports=Hello,而不是Exports world=function(){} 当模块被外部引用时,其接口对象是要输出的Hello对象本身,而不是原始导出。

    var Hello = require('./hello'); hello = new Hello(); hello.setName('BYVoid'); hello.sayHello();

    以上就是Node.js实战之Buffer和Stream模块系统深入剖析详解的详细内容,更多关于Node.js模块系统Buffer Stream的资料请关注易盾网络其它相关文章!

    本文共计1230个文字,预计阅读时间需要5分钟。

    Node.js中Buffer和Stream模块如何进行深度解析与应用实践?

    目录+正文+写入缓冲区+从流中读取数据+管道流+链式流+模块系统+正文字符串数据类型+JavaScript语言本身只有字符串数据类型,没有二进制数据类型。+但是,在处理TCP流或文件流时,必须使用二进制数据。

    目录
    • 正文
    • 写入缓冲区
    • 从流中读取数据
      • 管道流
      • 链式流
    • 模块系统

      正文

      JavaScript语言本身只有字符串数据类型,没有二进制数据类型。 但是,在处理TCP流或文件流时必须使用二进制数据。 因此,在node JS中,定义了一个缓冲区类来创建用于存储二进制数据的缓冲区。

      const buf = Buffer.from('runoob', 'ascii');

      在node JS中,缓冲区类是与node内核一起发布的核心库。 缓冲库是node JS带来的一种存储原始数据的方法,它允许节点JS。

      console.log(buf.toString('hex')); console.log(buf.toString('base64'));

      原始数据存储在buffer类的实例中。缓冲区类似于整数数组,但它对应于V8堆内存之外的一段原始内存。

      写入缓冲区

      写入 Node 缓冲区的语法如下所示:

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

      • string - 写入缓冲区的字符串。
      • offset - 缓冲区开始写入的索引值,默认为 0 。
      • length - 写入的字节数,默认为 buffer.length
      • encoding - 使用的编码。默认为 'utf8' 。

      buf = Buffer.alloc(256); len = buf.write("www.runoob.com"); console.log("写入字节数 : "+ len);

      输出为:

      $node main.js 写入字节数 : 14

      buf.write(string[, offset[, length]][, encoding]) 根据参数偏移量和指定的编码方法将参数字符串数据写入缓冲区。偏移量的默认值为0,默认编码方法为utf8。 长度是要写入的字符串的字节大小。返回数字类型,指示写入了多少8位字节流。 如果缓冲区没有足够的空间容纳整个字符串,它将只写入部分字符串。默认情况下,长度是缓冲区长度-偏移量此方法似乎无法写入某些字符。

      buf.writeDoubleBE(value, offset[, noAssert]) 根据传递的偏移量和指定的endian格式将值写入缓冲区。 注意:值必须是有效的64位双精度值。如果参数noassert为真,则不会验证值和偏移参数。 这意味着该值可能太大,或者偏移量可能超过缓冲区的末尾,从而导致丢弃该值。 默认值为false。

      从流中读取数据

      var fs = require("fs"); var data = '';

      创建可读流

      var readerStream = fs.createReadStream('input.txt');

      设置编码为 utf8。

      readerStream.setEncoding('UTF8');

      处理流事件 --> data, end, and error

      readerStream.on('data', function(chunk) { data += chunk; });

      readerStream.on('end',function(){ console.log(data); }); readerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕");

      管道流

      管道为输出流到输入流提供了一种机制。通常我们使用它从一个流中获取数据并将其传递给另一个流。 创建一个可读流

      var readerStream = fs.createReadStream('input.txt');

      创建一个可写流

      var writerStream = fs.createWriteStream('output.txt');

      管道读写操作,读取 input.txt 文件内容,并将内容写入到 output.txt 文件中。

      readerStream.pipe(writerStream);

      链式流

      链接是一种将输出流连接到另一个流并创建多个流操作链的机制。链流通常用于管道操作。 接下来,我们使用管道和链来压缩和解压缩文件。

      var fs = require("fs"); var zlib = require('zlib');

      压缩 input.txt 文件为 input.txt.gz

      fs.createReadStream('input.txt') .pipe(zlib.createGzip()) .pipe(fs.createWriteStream('input.txt.gz'));

      执行上述操作后,我们可以看到输入Txt压缩文件input.Txt.gz。 接下来,让我们解压文件并创建解压JS文件,代码如下:

      Node.js中Buffer和Stream模块如何进行深度解析与应用实践?

      var fs = require("fs"); var zlib = require('zlib');

      解压 input.txt.gz 文件为 input.txt

      fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt'));

      模块系统

      以便启用节点的文件。js相互调用,节点。js提供了一个简单的模块系统。 模块是JS应用程序的基本组件,文件和模块是一一对应的。 换句话说,node JS文件是一个模块。该文件可以是JavaScript代码、JSON或编译的C/C++扩展。 hello.js

      function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; };

      模块接口中唯一的变化是使用模块Exports=Hello,而不是Exports world=function(){} 当模块被外部引用时,其接口对象是要输出的Hello对象本身,而不是原始导出。

      var Hello = require('./hello'); hello = new Hello(); hello.setName('BYVoid'); hello.sayHello();

      以上就是Node.js实战之Buffer和Stream模块系统深入剖析详解的详细内容,更多关于Node.js模块系统Buffer Stream的资料请关注易盾网络其它相关文章!