- 동영상 스트리밍 생각해보세요. 8배속으로 보면 가끔씩 끊기죠? 왜냐하면 동영상을 미리 받아 놓아 버퍼로 쌓아놓는 것인데 더이상 버퍼가 없어서 흔히 말하는 버퍼링에 걸린 것입니다.
- 스트리밍은 조금씩 잘라서 보여주는 것이에요. 일반 텍스트 파일이든 동영상이든요. 이걸 사용하지 않는다면? 엄청나게 큰 크기에 파일을 읽기 위해서 한 번에 큰 메모리를 할당해줘야 할 겁니다.
const fs = require('fs').promises;
// 고정된 사이즈의 데이터 바이트, hello 한 번 찍어보면 바로 감이 옵니다.
const buffer = Buffer.from('hello world')
console.log(buffer); // 유니코드 형태
console.log(buffer.length);
console.log(buffer[0], buffer[1]); // 아스키코드
console.log(Buffer.concat([buffer, buffer, buffer]).toString())
fs.readFile('./TheGreatGatsby.txt', 'utf8').then((data)=>{
console.log(data.length);
// console.log(data.slice(0, 1000));
return data.slice(0, 100);
}).then((data)=>{
const buf = Buffer.from(data);
console.log(buf);
console.log(buf.length);
console.log(buf.toString()) //기본값은 utf-8
// console.log(buf.toJSON());
})
const fs = require('fs');
// addListener(event: 'close', listener: () => void): this;
// addListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
// addListener(event: 'end', listener: () => void): this;
// addListener(event: 'error', listener: (err: Error) => void): this;
// addListener(event: 'open', listener: (fd: number) => void): this;
// addListener(event: 'pause', listener: () => void): this;
// addListener(event: 'readable', listener: () => void): this;
// addListener(event: 'ready', listener: () => void): this;
// addListener(event: 'resume', listener: () => void): this;
// addListener(event: string | symbol, listener: (...args: any[]) => void): this;
// on(event: 'close', listener: () => void): this;
// on(event: 'data', listener: (chunk: Buffer | string) => void): this;
// on(event: 'end', listener: () => void): this;
// on(event: 'error', listener: (err: Error) => void): this;
// on(event: 'open', listener: (fd: number) => void): this;
// on(event: 'pause', listener: () => void): this;
// on(event: 'readable', listener: () => void): this;
// on(event: 'ready', listener: () => void): this;
// on(event: 'resume', listener: () => void): this;
// on(event: string | symbol, listener: (...args: any[]) => void): this;
const stream = fs.createReadStream('./TheGreatGatsby.txt', {
highWaterMark: 8, //한 번에 읽어오는 Byte 수(기본은 64KB)
encoding: 'utf-8'
});
const data = [];
// 리스너는 data, end, error
stream.on('data', (chunk)=>{
data.push(chunk);
console.log(chunk, chunk.length);
})
// console.log(data); // 중간 확인 불가
stream.on('end', ()=>{
console.log(data);
console.log(Buffer.concat(data).toString());
})