스트림

2855 단어
Stream은 추상적인 인터페이스로 노드의 많은 대상이 이 인터페이스를 실현했다.예를 들어 http 서버에 요청한 Request 대상은 Stream이고 stdout (표준 출구) 도 있습니다.Node.js에서 Stream에는 다음과 같은 네 가지 흐름 유형이 있습니다.
  • Readable - 읽기 가능 작업
  • Writable - 쓰기 가능
  • Duplex - 읽기 및 쓰기 가능
  • Transform - 작업이 기록된 후 결과를 읽습니다
  • 모든 Stream 객체는 Event Emitter의 예입니다.일반적으로 사용되는 이벤트는 다음과 같습니다.
  • 데이터 - 읽을 수 있는 데이터가 있을 때 터치
  • end - 읽을 수 있는 데이터가 더 없을 때 트리거
  • error - 수신 및 쓰기 중 오류 발생 시 트리거
  • finish - 모든 데이터가 최종 시스템에 기록되었을 때 터치
  • ** 스트림에서 데이터 읽기 **
    #!/usr/bin/env node
    let fs = require('fs');
    let data = '';
    
    //  
    let readableStream = fs.createReadStream('test.txt');
    
    //   utf-8
    readableStream.setEncoding('UTF8');
    
    //   --> data/end/error
    readableStream.on('data', function(chunk) {
      data +=chunk;
    })
    
    readableStream.on('end', function(){
      console.log(data);
    })
    
    readableStream.on('error', function(err){
      console.log(err.stack);
    })
    
    console.log(' ');
    

    쓰기 흐름
    #!/usr/bin/env node
    let fs = require('fs');
    let data = 'jiangsu normal universtey';
    
    //  ,  test.txt  
    let writeStream = fs.createWriteStream('test.txt');
    
    //   utf8  
    writeStream.write(data,'UTF8');
    
    //  
    writeStream.end();
    
    //   --> data/end/error
    writeStream.on('finish', function() {
        console.log(" 。");
    });
    
    writeStream.on('error', function(err){
       console.log(err.stack);
    });
    
    console.log(" ");
    

    위 프로그램은 데이터 변수의 데이터를 테스트에 기록합니다.txt 파일에서코드 실행 결과는 다음과 같습니다.
    $ node main.js 
     
     。
    

    파이프 흐름 파이프는 출력이 입력 흐름으로 흐르는 메커니즘을 제공한다.일반적으로 우리는 한 흐름에서 데이터를 얻고 다른 흐름으로 전달하는 데 사용된다.다음 예는 한 파일의 내용을 읽고 다른 파일에 쓰는 것입니다.
    var fs = require("fs");
    
    //  
    var readerStream = fs.createReadStream('input.txt');
    
    //  
    var writerStream = fs.createWriteStream('output.txt');
    
    //  
    //   input.txt  ,  output.txt  
    readerStream.pipe(writerStream);
    
    console.log(" ");
    

    체인식 흐름 체인식은 출력을 연결하여 다른 흐름으로 흐르게 하고 여러 개의 흐름 조작 체인을 만드는 메커니즘이다.체인식 흐름은 일반적으로 파이프 조작에 쓰인다.다음에 우리는 파이프와 체인식으로 파일을 압축하고 압축하는 것이다.
    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'));
      
    console.log(" 。");
    

    이상의 조작을 실행한 후 현재 디렉터리에 input가 생성된 것을 볼 수 있습니다.txt의 압축 파일 input.txt.gz. 다음은 이 파일을 풀고decompress를 만듭니다.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'));
      
    console.log(" 。");
    

    좋은 웹페이지 즐겨찾기