영상을 로딩할 때 버퍼링 한다고 하고, 영상을 실시간으로 송출할 때 스트리밍 한다고 한다.
버퍼
- 버퍼링 : 영상을 재생할 수 있을 때까지 데이터를 모으는 동작
- 노드는 파일을 읽을 때 메모리에 파일 크기만큼 공간을 마련해두며 파일 데이터를 메모리에 저장한 뒤 사용자가 조작할 수 있도록 한다. 이때 메모리에 저장된 데이터가 버퍼이다.
- 버퍼를 직접 다룰 수 있는, Buffer 클래스가 있다.
Buffer.from(문자열) // 문자열을 버퍼로 바꿈
Buffer.toString(버퍼) // 버퍼를 문자열로 바꿈
Buffer.concat(배열) // 배열 안에 든 버퍼들을 하나로 합침.
Buffer.alloc(바이트) // 바이트 크기의 빈 버퍼를 생성함
스트림
- 스트리밍 : 방송인의 컴퓨터에서 시청자의 컴퓨터로 영상 데이터를 조금씩 전송하는 것
- readFile 방식의 버퍼가 편리하기는 하지만, 서버처럼 몇 명이 이용할 지 모르는 환경에서는 버퍼 메모리 할당에 메모리 문제가 생길 수 있다.
- 그래서 버퍼의 크기를 작게 만든 후 여러 번으로 나눠 보내는 방식이 등장했다. → 스트림
- createReadStream → 파일을 읽는 스트림 메서드
const fs = require('fs');
// readme3.txt 파일을 16byte 버퍼 크기로 나눠서 읽는다.
const readStream = fs.createReadStream('./readme3.txt', {highWaterMark: 16});
const data = [];
readStream.on('data', (chunk) => {
data.push(chunk);
console.log('data :',chunk,chunk.length);
});
readStream.on('end', (chunk) => {
console.log('data :',Buffer.concat(data).toString());
});
readStream.on('error', (chunk) => {
console.log('error :',err);
});
createWriteStream.js
const fs = require('fs');
const writeStream = fs.createWriteStream('./writeme2.txt');
// finish 이벤트 리스너
writeStream.on('finish',() => {
console.log('파일 쓰기 완료');
});
writeStream.write('이글을 씁니다.')
writeStream.write('한번더 씁니다.')
writeStream.end();
Share article