상세 컨텐츠

본문 제목

Buffer & Stream - Nodejs

Programming/Concept

by 쌩우 2019. 5. 14. 17:19

본문

CreateReadStream

const fs = require('fs');

const readStream = fs.createReadStream('./readme.txt', {highWaterMark: 16});
const data = [];
// readme.txt에 대한 buffer를 16bytes씩 생성한다.

readStream.on('data', (chunk) => {
    data.push(chunk);
    consoloe.log('data', chunk, chunk.length);
    //buffer를 생성하기 위한 조각 조각들을 chunk라고 한다.
})

readStream.on('end', () => {
    console.log('end', Buffer.concat(data).toString());
    //chunk의 모음인 data를 사람이 알 수 있는 문자열로 바꿔준다.
})

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

createWriteStream

const fs = require('fs');

const writeStream = fs.createWriteStream('./writeme.txt');
writeStream.on('finish', () => {
    console.log('파일 쓰기 완료');
})

writeStream.write('이 글을 씁니다.\n');
wrtieStream.write('한번 더 씁니다.');
writeStream.end();

pipe
stream은 buffer의 흐름이기 때문에, 여러 개의 stream을 이어 buffer가 흘러가게 할 수 있다.

const fs = require('fs');

const readStream = fs.createReadStream('readme.txt');
const writeStream = fs.createWriteStream('writeme.txt');

readStream.pipe(writeStream);
//이렇게 하면, readme.txt를 읽어들여, writeme.txt로 새로 써 줄 수 있다.
//복사 같은 개념으로 볼 수 있다.

pipe는 stream 간에 연속해서 계속 이어질 수 있다.

const fs = require('fs'); 
const zlib = require('zlib');

const zlibStream = zlib.createGzip();
const readStream = fs.createReadStream('readme.txt');
const writeStream = fs.createWriteStream('writeme.txt');

readStream.pipe(zlibStream).pipe(writeStream);
//Gzip 형식으로 data를 압축하여 piping 가능하다.

새로 나온 파일 복사 방법

const fs = require('fs');
const readStream = fs.copyFile('./readme.txt', './writeme.txt', (err) => {
    console.error(err);
})

관련글 더보기

댓글 영역