본문 바로가기
Web/Node.js

06. 버퍼(buffer), 스트림(Steam)

by 사라리24 2024. 4. 24.
SMALL

1. 버퍼(buffer)

 메모리에 저장되는 일부 공간
바이트 단위로 저장되며 integer 형태의 배열

 

  • 버퍼(Buffer)
  
       < js >

 
            const buf=Buffer.from('Hi');
            console.log(buf);               // <Buffer 48 69>
            console.log(buf.length);    // 2
            console.log(buf[0]);           // 72
            console.log(buf[1]);           //105 * 아스키 코드로 바이트 값이 저장됨
            console.log(buf.toString());    // 문자열로 변환
 
 
       </js >
  
<Buffer 48 69>
2
72
105
Hi

 

  • 문자열 출력_1
 
      < js >

            const buf2=Buffer.alloc(2); //2개의 공간확보 할당
            buf2[0]=72;
            buf2[1]=105;
            console.log(buf2.toString());
 
       </js >
  
Hi

 

  • 문자열 출력_2
  
      < js >

            // 아스키코드 확인
            const buf3=Buffer.from('nodejs');
            console.log(buf3[0]);
            console.log(buf3[1]);
            console.log(buf3[2]);
            console.log(buf3[3]);
            console.log(buf3[4]);
            console.log(buf3[5]);
 
            console.log('-----------------------------')
 
            // 아스키코드로 해당 문자열 만들기
            const nodejs=Buffer.alloc(6);
            (nodejs[0])=110;
            (nodejs[1])=111;
            (nodejs[2])=100;
            (nodejs[3])=101;
            (nodejs[4])=106;
            (nodejs[5])=115;
            console.log(nodejs.toString());
 
       </js >
  
 
110
111
100
101
106
115
-----------------------------
nodejs

 

  • 이어붙여보기
 
      < js >

            const newBuf=Buffer.concat([buf,buf2,nodejs]);
            console.log(newBuf.toString());
 
 
       </js >
  
HiHinodejs

 

2.트림(Steam)

데이터의 흐름을 나타내며 데이터를 읽는 스트림, 데이터를 쓰는 스트림, 데이터를 읽고 쓰는 스트림 등이 있음
일반적으로 데이터를 효율적으로  처리하고 메모리 사용량을 최적화하기 위해 사용

 

  •  
  
       < js >

            const fs=require('fs');

            // 메모리 사용량을 알아보기
            // rss: 메모리 사용량을 알아와서 변수에 저장까지 해줌
            const beforeMem = process.memoryUsage().rss;  
            console.log(beforeMem);

 
       </js >
  
24383488

 

  •  
 
      < js >

            // 대충 lorem을 복붙한 커다란 html 파일(test.html)을 만듦
            // fs.인코딩방법,(path,콜백함수(error,data))
            fs.readFile('./test.html',(_, data) => {
                fs.writeFile('./file.txt',data,()=>{
                    console.log('파일 저장 완료!')
                });
               
                const afterMem=process.memoryUsage().rss;
                const diff = afterMem-beforeMem // 파일의 용량
                const result = diff / 1024 / 1024; // 파일 단위 바꾸기

                //바이트 단위를 MB 단위로 바꾸기
                //const consumed=(afterMem-beforeMem)/(1024*1024);

                console.log(diff); //1507328
                console.log(`메모리 사용:${result}MB`);  //메모리 사용:1.4375MB
            });
 
       </js >
  
1507328
메모리 사용:1.4375MB
파일 저장 완료!

 

  • pipe()
    : 스트림을 연결하고 데이터를 한 스트림에서 다른 스트림으로 자동으로 전달하는 메소드.
      데이터를 효율적으로 처리, 복사하지 않고도 한 스트림에서 다른 스트림으로 데이터 전달 가능

 
      < js >

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

            const readStream = fs.createReadStream('./file.txt'); //파일 가져오기
            const zlibStream = zlib.createGzip(); //압축 스트림생성
            const writeStream = fs.createWriteStream('./file2.txt.gz'); //읽어오는 스트림생성
            / /뒤에 압축파일명도 붙여주기!

            //읽어와서 압축해서 파일로 만들기
            const piping = readStream.pipe(zlibStream).pipe(writeStream);
 
            //이벤트 연결 모든 스트림의 결과가 다 끝났다면 '끝'출력
            piping.on('finish',()=>{console.log('끝!');});


 
       </js >
  




 

'Web > Node.js' 카테고리의 다른 글

08. Express 웹 프레임워크, route, morgan  (0) 2024.04.25
07. http 모듈, 템플릿 엔진  (0) 2024.04.24
05. Console, This, file  (0) 2024.04.23
04. JSON  (0) 2024.04.23
03. timeout, promise, async  (0) 2024.04.23