14.node中的转化流Transform

转换流

转化流是一种双工流,继承双工流,能够使得可写流与可读流之间相互转化

1. 转换流的实现

stream.Transform 类原型上继承自 stream.Duplex 并实现其自己版本的 writable._write() 和 readable._read() 方法。 自定义的 Transform 实现必须实现 transform._transform() 方法,也可以实现 transform._flush() 方法。

// 转化流——可以吧可写流转换成可读流,可以用于加密 压缩
const { Transform } = require('stream')

class MyTransfrom extends Transform{
  _transform(chunk, encoding, cb){
    // 这里可以调用push方法
    this.push(chunk.toString().toUpperCase()) // 将读到的内容转成大写,再给可写流
    cb();
  }
}

let my = new MyTransfrom()

// process.stdin.pipe(my) 这样,my就是可写流
// (my).pipe(process.stdout) 这样,my就是可读流
// process.stdin.pipe(my).pipe(process.stdout)这样my就充当了转化流,将读到的数据传递给my,也就会调用Transform类的transform方法,这个transform方法会调用子类的_transform方法,将读到的内容传入到这个_transform方法中
// 所以,可以通过process.stdin.pipe(my).pipe(process.stdout)的pipe(my),将流进行转化,
process.stdin.pipe(my).pipe(process.stdout)
// 可以做压缩,可以将源文件内容读取出来,然后转化流进行压缩,然后再给可写流,写到文件中
3. 转化流的应用场景

gulp 非常擅长处理代码本地构建流程,看一段官网的示例代码

gulp.src('client/templates/*.jade')

  .pipe(jade())

  .pipe(minify())

  .pipe(gulp.dest('build/minified_templates'));

其中 jada() 和 minify() 就是典型的 Transform,处理流程大概是

.jade 模板文件 -> jada() -> html 文件 -> minify -> 压缩后的 html

可以看出来,jade() 和 minify() 都是对输入数据做了些特殊处理,然后交给了输出数据。

4. 双工流与转化流的异同点
  • 转化流继承自双工流
  • 当一个流同时面向生产者(可读流)和消费者(可写流)的时候,应该使用Duplex
  • Duplex 虽然同事具备可读流和可写流,但两者是相对独立的;Transform 的可读流的数据会经过一定的处理过程自动进入可写流。
5.process中的可读流可写流
  • process.stdin是一个可读流
  • process.stdout和process.stderr是一个可写流
// process.stdin是一个可读流
process.stdin.on('data', (chunk) => { // 可以监控用户输入内容
  // console.log('可读流', chunk)
  process.stdout.write(chunk)
})
// 上面再可读流里面写可写流,直接可以使用pipe
process.stdin.pipe(process.stdout)

// process.stdout和process.stderr是一个可写流
process.stdout.write('ok\r\n')
process.stderr.write('err\r\n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ".node" 文件是一种二进制文件,它是由 Node.js 提供的一种方式来打包和部署 C/C++ 扩展。在 Node.js ,你可以使用 require() 函数来加载这种类型的文件。 在 Node.js ,你可以使用以下命令来编译 ".node" 文件: ``` node-gyp configure build ``` 你也可以使用以下命令来安装 ".node" 文件: ``` npm install my-module.node ``` 你还可以使用以下命令来删除 ".node" 文件: ``` npm uninstall my-module ``` 请注意,".node" 文件并不是所有操作系统都支持的文件类型。例如,Windows 不支持 ".node" 文件。因此,在 Windows ,你可能会遇到 "Unknown file extension ".node"" 的错误消息。 希望这对你有帮助。 ### 回答2: 在 Node.js ,当遇到错误信息 "Unknown file extension '.node'" 时,通常表示在引入模块时,所指定的文件扩展名无法被识别或处理。 文件扩展名是文件名的一部分,用于标识文件的类型。在 Node.js ,常见的文件扩展名包括 ".js"、".json"、".txt" 等等。当引入模块时,Node.js 会根据文件扩展名来决定如何解析和处理对应的文件。 当出现 "Unknown file extension '.node'" 错误时,这表示 Node.js 在解析文件时无法识别 ".node" 这个扩展名。这可能有以下几个原因: 1. 错误的文件扩展名:首先,我们需要确保所指定的文件扩展名是正确的。如果文件实际上有 ".js" 或其他标准的扩展名,那么可能是写错了引入语句,或者文件本身存在问题。 2. 需要特殊处理的扩展名:有时,某些扩展名需要通过特殊的方式加载和处理,而不是按照通常的方式。例如,".node" 扩展名常用于加载编译后的二进制模块,这些模块通常是使用 C++ 或其他编译语言编写并与 Node.js 运行时绑定在一起的。在这种情况下,需要使用适当的方式来加载和使用这些特殊的二进制模块。 3. 缺少依赖模块:如果代码用到了某个特定的扩展名加载的模块,但你的项目没有相应的模块依赖,就会出现该错误。需要确保项目的依赖项正确安装,并且包含了所需的模块。 为了解决 "Unknown file extension '.node'" 错误,可以尝试以下几个方法: 1. 确保文件扩展名正确,并且引入语句正确无误。 2. 查阅相关文档或资料,确认对于特定的扩展名是否需要特殊的处理方式。 3. 使用包管理工具(如 NPM)查找和安装缺少的依赖模块。 4. 如果仍然无法解决问题,可以考虑在 Node.js 社区或相关论坛上提问,以便寻求更深入的帮助和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值