Latest web development tutorials

Node.js를 스트림 (스트림)

스트림 추상 인터페이스, 노드는 많은 개체가이 인터페이스를 구현있다. 예를 들어, HTTP 요청 객체에 대한 요청을 개시 한 서버는 스트림뿐만 아니라, 표준 출력 (표준 출력)이다.

Node.js를, 스트림 흐름의 네 가지 유형이 있습니다 :

  • 읽을 수 - 읽을 수있는 동작.

  • 쓰기 - 쓰기 작업.

  • 이중 - 읽기 및 쓰기 작업.

  • 변환 - 데이터 기록 동작을 한 후 그 결과를 판독한다.

모든 개체는 EventEmitter 스트림의 인스턴스입니다. 공통 이벤트는 다음과 같습니다 :

  • 데이터 - 데이터가 시간을 읽을 때 발생.

  • 끝 - 더 읽기 데이터를 트리거하지 않고.

  • 오류 - 오류가 수신 및 기록 프로세스에서 발생할 때 트리거.

  • 마무리 - 모든 데이터가 기본 시스템에 기록 된 화재.

이 튜토리얼은 일반적인 스트림 작업을 소개합니다.


스트림에서 데이터를 읽기

다음과 같이 input.txt을 파일을 만듭니다

本教程官网地址:www.w3big.com

다음과 같이 main.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("程序执行完毕");

다음과 같이 위의 코드가 실행된다 :

程序执行完毕
本教程官网地址:www.w3big.com

쓰기 스트림

다음과 같이 main.js 파일을 만듭니다

var fs = require("fs");
var data = '本教程官网地址:www.w3big.com';

// 创建一个可以写入的流,写入到文件 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 
本教程官网地址:www.w3big.com

파이프 라인의 흐름

파이프 라인은 출력 흐름 입력 스트림을위한 메커니즘을 제공한다. 우리는 일반적으로 데이터를 취득하고, 스트림에서 다른 스트림으로 데이터를 전송하는 데 사용된다.

위의 그림과 같이, 우리는 물이 가득 문서 버킷을 비교, 우리는 파이프 (파이프)와 다른 통에 양동이에서 물이 양동이를 연결되도록 물 때문에, 문서의 내용입니다 천천히 복제 프로세스 큰 파일을 깨달았다.

다음의 예는 우리는 파일과 콘텐츠의 내용을 읽고 다른 파일에 기록합니다.

다음과 같이 input.txt를 설정 문서를 읽습니다 :

本教程官网地址:www.w3big.com
管道流操作实例

다음과 같이 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("程序执行完毕");

다음과 같이 코드의 실행 결과는 다음과 같습니다

$ node main.js 
程序执行完毕

파일의 내용을 볼 OUTPUT.TXT :

$ cat output.txt 
本教程官网地址:www.w3big.com
管道流操作实例

체인 흐름

체인 다른 흐르는 스트림과 출력에 연결하여 다수의 스트림 작동기구 체인을 생성한다. 체인 스트림은 일반적으로 파이프 라인 동작을 위해 사용된다.

다음으로 우리는 압축 파일을 압축 해제하는 파이프와 체인입니다.

다음과 같이 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 
文件解压完成。