Node.js_버퍼(buffer)와 스트림(stream)
Node.js 2021. 7. 1. 16:57(본 포스팅은 길벗의 'Node.js 교과서' 책을 공부하면서 작성되었습니다_내돈내산)
- 버퍼(Buffer): 일정한 크기로 모아두는 데이터
- 일정한 크기가 되면 한 번에 처리
- 버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업\
const buffer = Buffer.from('저를 버퍼로 바꿔보세요');
console.log('from():', buffer);
console.log('length:', buffer.length);
console.log('toString():', buffer.toString());
const array = [Buffer.from('띄엄 '), Buffer.from('띄엄 '), Buffer.from('띄어쓰기')];
const buffer2 = Buffer.concat(array); // 버퍼를 다 합치는 작업
console.log('concat():', buffer2.toString());
const buffer3 = Buffer.alloc(5); // 데이터없이 빈 버퍼를 만들때(5바이트짜리 버퍼생성)
console.log('alloc():', buffer3);
- 스트림(Stream): 데이터의 흐름
- 일정한 크기로 나눠서 여러번에 걸쳐서 처리
- 버퍼(또는 청크)의 크기를 작게 만들어서 주기적으로 데이터를 전달
- 스트리밍: 일정한 크기의 데이터를 지속적으로 전달하는 작업
- 버퍼방식에 비해 메모리를 절약할 수 있다.(파일을 작게 잘라서 보내는만큼 그 작은 파일의 사이즈만큼만 메모리를 사용함.)
// 파일 읽기 스트림
const fs = require('fs');
const readStream = fs.createReadStream('./readme3.txt', { highWaterMark: 16 });
// highWaterMark >> 기본값이 약 64kbtye인데, 이 속성을 입력함으로써 한번 읽어올 용량이 지정가능함
const data = []; // 파일을 합쳐서 집어넣을 빈 배열
readStream.on('data', (chunk) => {
data.push(chunk); // chunk로 순서대로 끊어져서 올때마다 받아서 배열에 모아준다.
console.log('data :', chunk, chunk.length);
});
readStream.on('end', () => { // 스트리밍 끝
console.log('end :', Buffer.concat(data).toString()); // 흩어져있던 버퍼를 다 모아줌
});
readStream.on('error', (err) => { // 비동기면 반드시 에러처리 필수
console.log('error :', err);
});
// 파일 쓰기 스트림
const fs = require('fs');
const writeStream = fs.createWriteStream('./writeme2.txt');
writeStream.on('finish', () => {
console.log('파일 쓰기 완료');
});
writeStream.write('이 글을 씁니다.\n');
writeStream.write('한 번 더 씁니다.');
writeStream.end();
- pipe( ) 메서드: 여러개의 스트림을 이어 중간에 전달되는 데이터에 다른 조작을 가할 수 있다.
- 여러개의 스트림을 pipe를 이용햐 연결할 수 있다.
const zlib = require('zlib');
const fs = require('fs');
const readStream = fs.createReadStream('./readme4.txt');
const zlibStream = zlib.createGzip();
const writeStream = fs.createWriteStream('./readme4.txt.gz');
readStream.pipe(zlibStream).pipe(writeStream);
------------------------------------------------------------------------------------------------
const fs = require('fs');
const readStream = fs.createReadStream('readme4.txt');
const writeStream = fs.createWriteStream('writeme3.txt');
readStream.pipe(writeStream);
'Node.js' 카테고리의 다른 글
Node.js_쿠키와 세션 (0) | 2021.07.02 |
---|---|
Node.js_HTTP 모듈로 서버 만들기 (0) | 2021.07.01 |
Node.js_파일 시스템(fs) (0) | 2021.07.01 |
Node.js_워커스레드(worker thread) (0) | 2021.07.01 |
Node.js_crypto와 util (0) | 2021.07.01 |