본문 바로가기

개발

[Node.js] Streams 사용하기




MEAN STACK node.js

테스트 환경 : Windows 10 64-bit

이번엔 스트림을 사용해보자.

뭔가 다들 비슷한 느낌이 들지만.. 


스트림은 소스에서 데이터를 읽거나 쓸수 있는 객체이다.

Readable, Writable, Duplex, Transform. 4가지 타입으로 되어 있다.



테스트 진행을 위해 'fs'모듈을 설치하자.

이미 설치가 되어있으면 패쓰~


node install fs



파일을 읽기 위한 스트림 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var fs = require("fs");
var data = '';
 
// 'input.text'파일을 읽을 수 있는 stream 생성
var readerStream = fs.createReadStream('input.txt');
 
// utf8로 인코딩
readerStream.setEncoding('UTF8');
 
// Handle stream events 
// 시작시 실행
readerStream.on('data'function(chunk) {   
    console.log('1.data');
    data += chunk;
});
 
// 종료시 실행 
readerStream.on('end',function(){    
    console.log('2.end');
    console.log(data);
});
 
// error 발생시 실행 
readerStream.on('error'function(err){
    console.log('3.error');
    console.log(err.stack);
});
 
console.log("Program Ended");
cs



결과출력

Program Ended

1.data

2.end


지금 보는 내용은 input.txt에 입력된 내용입니다.


! 존재하지 않는 파일로 스트림을 생성하면 error 이벤트를 확인할 수 있다.



스트림 쓰기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var fs = require("fs");
var data = 'output.txt에 새로운 글을 입력합니다.';
 
// 쓰기를 위한 스트림 생성
var writerStream = fs.createWriteStream('output.txt');
 
// utf8로 인코딩하여 데이터 쓰기
writerStream.write(data,'UTF8');
 
// 파일 종료
writerStream.end();
 
// Handle stream events 
// 쓰기 종료시
writerStream.on('finish'function() {
    console.log("Write completed.");
});
 
// error 발생시 
writerStream.on('error'function(err){
   console.log(err.stack);
});
 
console.log("Program Ended");
cs



결과출력

Program Ended

Write completed.


! 현재 js파일 위치에 output.txt 파일이 생성된 걸 확인 할 수 있다.




ping streams

1
2
3
4
5
6
7
8
9
10
11
12
13
var fs = require("fs");
 
// 읽기 위한 스트림 생성
var readerStream = fs.createReadStream('input.txt');
 
// 쓰기 위한 스트림 생성
var writerStream = fs.createWriteStream('output.txt');
 
// Pipe the read and write operations
// input.txt 파일을 읽어서, 그 내용을 output.txt파일에 입력한다.
readerStream.pipe(writerStream);
 
console.log("Program Ended");
cs



결과출력

Program Ended


! input.txt 내용이 output.txt 파일 안에 쓰여진 걸 확인 할 수 있다.

카피의 개념인가? 




스트림 압축하기

1
2
3
4
5
6
7
8
9
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("File Compressed.");
cs



결과출력

File Compressed.


! input.txt 파일이 input.txt.gz 파일로 압축되었다.

 현재 경로에 추가된걸 확인할 수 있다.



스트림 압축해제

1
2
3
4
5
6
7
8
var fs = require("fs");
var zlib = require('zlib');
 
// input.txt.gz를 inputABC.txt란 이름으로 압축 해제하기.
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('inputABC.txt'));
    console.log("File Decompressed.");
cs



결과출력

File Decompressed.


! 말 그대로 압축한 파일을 inputABC.txt로 압축해제~ 

 현재 경로에서 확인 할 수 있다.

 아, 그리고 zlib 모듈은 설치없이 사용이 가능하다. 설치를 시도하니 에러가 나네. 이건 뭐지? 



참조 : http://www.tutorialspoint.com/nodejs/nodejs_streams.htm




'개발' 카테고리의 다른 글

[Node.js] Global Objects  (0) 2015.12.17
[Node.js] File System  (0) 2015.12.17
[Node.js] Streams 사용하기  (0) 2015.12.16
[Node.js] buffer 사용하기  (0) 2015.12.16
[Java] 자바로 달력 만들기(콘솔출력)  (0) 2015.12.15
[HTML] Markup 검증 서비스를 이용한 웹표준 검사  (0) 2015.12.15

맨 위로