Node.js实战之Buffer和Stream模块系统深入剖析详解

 更新时间:2022年08月18日 12:02:01   作者:黎燃  
这篇文章主要介绍了Node.js实战之Buffer和Stream模块系统深入剖析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

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文件,代码如下:

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的资料请关注脚本之家其它相关文章!

相关文章

  • node.js如何操作MySQL数据库

    node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下
    2020-10-10
  • nodejs使用redis作为缓存介质实现的封装缓存类示例

    nodejs使用redis作为缓存介质实现的封装缓存类示例

    这篇文章主要介绍了nodejs使用redis作为缓存介质实现的封装缓存类,涉及nodejs操作redis进行缓存设置相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • node.js中fs\path\http模块的使用方法详解

    node.js中fs\path\http模块的使用方法详解

    Node.js是基于Chrome V8引擎的JavaScript的运行时(运行环境-宿主环境),下面这篇文章主要给大家介绍了关于node.js中fs\path\http模块的使用方法,需要的朋友可以参考下
    2023-01-01
  • 详解nodejs 文本操作模块-fs模块(五)

    详解nodejs 文本操作模块-fs模块(五)

    本篇文章主要介绍了nodejs 文本操作模块-fs模块(五),这里再说最后一个我看来很重要的方法,监听文件或者目录的的方法watchFile。有兴趣的可以了解一下。
    2016-12-12
  • Node.js实战之Buffer和Stream模块系统深入剖析详解

    Node.js实战之Buffer和Stream模块系统深入剖析详解

    这篇文章主要介绍了Node.js实战之Buffer和Stream模块系统深入剖析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Win7系统只能安装的nodejs13.14,如何安装高版本nodejs

    Win7系统只能安装的nodejs13.14,如何安装高版本nodejs

    正常情况下,Win7支持的Node.js最高版本是V13.14,但在开发过程中,有不少Vue项目或其他需要依赖Node环境的项目,对Node版本要求都比较高,对此,我们要么重装操作系统到Win8以上,要么就得想办法在Win7中安装高版本的Node,否则很多项目在编译打包时可能会出现警告信息或失败
    2024-11-11
  • 使用express搭建一个简单的查询服务器的方法

    使用express搭建一个简单的查询服务器的方法

    本篇文章主要介绍了使用express搭建一个简单的查询服务器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • node.js中的fs.readFile方法使用说明

    node.js中的fs.readFile方法使用说明

    这篇文章主要介绍了node.js中的fs.readFile方法使用说明,本文介绍了fs.readFile的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • nodejs处理http请求实例详解之get和post

    nodejs处理http请求实例详解之get和post

    最近一段时间在学习前端向服务器发送数据和请求数据,下面这篇文章主要给大家介绍了关于nodejs处理http请求实例详解之get和post的相关资料,需要的朋友可以参考下
    2023-01-01
  • Node.js操作MySQL8.0数据库无法连接的问题解决

    Node.js操作MySQL8.0数据库无法连接的问题解决

    使用node.js连接数据库MySQL 8时候,显示报错 ER_NOT_SUPPORTED_AUTH_MODE,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2023-10-10

最新评论