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
admin