MST

星途 面试题库

面试题:JavaScript自定义Node转换流实现

请实现一个自定义的Node转换流,该转换流能够将输入的文本流中的所有英文字母转换为大写,并对特殊字符进行特定的加密处理(例如将'#'替换为'$')。要求详细说明转换流的实现原理,以及如何处理流的各种事件(如data、end等),并提供完整的JavaScript代码。
10.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

实现原理

  1. Node转换流:Node.js中的Transform流是可读流和可写流的组合。它可以在数据从可读端流向可写端的过程中对数据进行转换。
  2. 字母大写转换:通过JavaScript的字符串方法toUpperCase()将文本中的英文字母转换为大写。
  3. 特殊字符加密:通过字符串的replace方法将特定的特殊字符进行替换,这里将'#'替换为'$'

事件处理

  1. data事件:当有新的数据块可读时,Transform流的_transform方法会被调用。在这个方法中,我们对数据进行转换操作,然后将转换后的数据通过this.push方法推送到可写端。
  2. end事件:当可读流没有更多数据可读时,Transform流的_flush方法会被调用。这里我们可以进行一些清理操作,例如确保所有数据都已经被处理并推送到可写端。

JavaScript代码

const { Transform } = require('stream');

class CustomTransform extends Transform {
    constructor() {
        super();
    }

    _transform(chunk, encoding, callback) {
        let data = chunk.toString();
        data = data.toUpperCase();
        data = data.replace(/#/g, '$');
        this.push(data);
        callback();
    }

    _flush(callback) {
        callback();
    }
}

// 示例用法
const readable = require('stream').Readable.from('hello #world');
const customTransform = new CustomTransform();
const writable = require('stream').Writable({
    write(chunk, encoding, callback) {
        console.log(chunk.toString());
        callback();
    }
});

readable.pipe(customTransform).pipe(writable);