Node 학습(5)--Stream

3636 단어

Node.js Stream(흐름)


Stream은 추상적인 인터페이스로 노드의 많은 대상이 이 인터페이스를 실현했다.예를 들어 http 서버에 요청한 Request 대상은 Stream이고 stdout (표준 출력) 도 있습니다.
Stream에는 4가지 흐름 유형이 있습니다.Readable - 읽을 수 있습니다.Writable - 쓰기 가능Duplex - 읽기 및 쓰기 가능.Transform - 작업이 데이터를 쓰고 결과를 읽습니다.
모든 Stream 객체는 Event Emitter의 인스턴스입니다.자주 사용하는 이벤트는 다음과 같습니다: data - 데이터를 읽을 수 있을 때 터치합니다.end - 읽을 수 있는 데이터가 더 이상 없을 때 트리거합니다.error - 수신 및 쓰기 중 오류가 발생할 때 트리거합니다.finish - 모든 데이터가 기본 시스템에 기록되었을 때 트리거됩니다.

흐름에서 데이터 읽기


input. 만들기txt 파일, 내용은 다음과 같습니다. hellomain.js 파일, 코드는 다음과 같습니다.
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(" ");

이러한 코드 실행 결과는 다음과 같습니다.
 
hello

쓰기 흐름


만들다js 파일, 코드는 다음과 같습니다.
var fs = require("fs");
var data = 'hello';

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

//   utf8  
writerStream.write(data,'UTF8');

//  
writerStream.end();

//   --> data, end, and error
writerStream.on('finish', function() {
    console.log(" 。");
});

writerStream.on('error', function(err){
   console.log(err.stack);
});

console.log(" ");

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

output. 보기txt 파일의 내용:
$ cat output.txt 
hello

파이프라인 스트림


파이프는 출력이 입력 흐름으로 흐르는 메커니즘을 제공했다.일반적으로 우리는 한 흐름에서 데이터를 얻고 다른 흐름으로 전달하는 데 사용된다.
다음 예는 한 파일의 내용을 읽고 다른 파일에 쓰는 것입니다.input. 설정txt 파일의 내용은 다음과 같습니다: hellomain.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(" ");

코드 실행 결과는 다음과 같습니다.
$ node main.js 
 

output. 보기txt 파일의 내용:
$ cat output.txt 
hello

체인 스트림


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

코드 실행 결과는 다음과 같습니다.
$ node compress.js 
 。

이상의 조작을 실행한 후 현재 디렉터리에 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(" 。");

코드 실행 결과는 다음과 같습니다.
$ node decompress.js 
 。

참조http://www.runoob.com/

좋은 웹페이지 즐겨찾기