본문 바로가기
TIL/Node JS

버퍼, 스트리밍 (2)

by koreashowme 2019. 10. 20.

const fs = require('fs');

 

const readStream = fs.createReadStream('./readme.txt , { highWaterMark: 1}');

// ./readme.txt 읽는다.

// highWaterMark :16 => 16 바이트 식으로 읽을 것이 다.

// 16바이트 버퍼를 채우면 읽고, 그 다음 16바이트를 또 읽고, 스트리밍 흘러가는 방식.

 

const data = [ ];

readStream.on('data', (chunk) => { //16바이트씩 오는 것을 chunk(버퍼들)라고 부른다.

data.push(chunk);

console.log('data', chunk, chunk.length);

})

// 스트림은 => 이벤트 기반으로 동작한다. data, end, error.

// 버퍼(chunk)들이 들어올 때마다 => data 이벤트가 발생한다.

 

readStream.on('end', () => {

console.log('end', Buffer.concat(data).toString());

})

 

// Buffer => global 안에 있는 객체.

// concat => 하나로 합친다.

// toString => 버퍼를 사람이 읽을 수 있도록 문자로 만들어준다.

 

readStream.on('error', (err) => {

console.log('error', err);

})

 

// 스트림은 버퍼의 흐름이기 때문에 여러 개의 스트림을 이어 버퍼가 흘러가게 할 수 있다.

// pipe

 

const fs = require('fs');

 

const readStream = fs.createReadStream('readme4.txt');

const writeStream = fs.createWriteStream('writeme3.txt');

readStream.pipe(writeStream); // 복사 기능이라고 생각하면 됨. pipe 연결 계속 가능.

 

copyFile 을 사용해도 된다.

const readStream = fs.copyFile('./readme4', './writeme4.txt', (err) => {

console.log(err);

})

 

const zlib = require('zlib'); //파일을 압축하는 모듈

const zlibStream = zlib.createGzip();

const readStream = fs.createReadStream('readme4.txt');

const writeStream = fs.createWriteStream('writeme5.txt');

readStream.pipe(zlibStream).pipe(writeStream); // 파일을 압축해서 사용.

'TIL > Node JS' 카테고리의 다른 글

on === addEventListener, new eventEmitter( ), emit ( )  (0) 2019.10.20
기타 fs 메서드  (0) 2019.10.20
버퍼, 스트리밍 (1)  (0) 2019.10.20
promisify, callback, promise, async  (0) 2019.10.20
URL 모듈 , querystring 모듈  (0) 2019.10.20

comment