목차
버퍼란 무엇입니까
버퍼 인스턴스화
웹 프론트엔드 JS 튜토리얼 NodeJS의 버퍼에 대한 간략한 분석

NodeJS의 버퍼에 대한 간략한 분석

Nov 18, 2020 pm 05:59 PM
buffer nodejs

NodeJS의 버퍼에 대한 간략한 분석

관련 추천: "node js tutorial"

그때 저는 Node를 시작하기 위해 Pu Ling의 Nine Lights and One Deep NodeJS를 읽었습니다. Pu Dada의 책에서는 연습에 대해 거의 언급하지 않고 원칙에 더 많은 공간을 할애합니다. 많은 사실을 듣고 프론트엔드 엔지니어링 분야에서 NodeJS를 사용하기 시작했지만 모든 곳에서 제약을 받았습니다. 그 이유를 요약하면 NodeJS의 어려운 부분은 파일 작업과 네트워크에 지나지 않는다는 것을 알게 되었습니다. 둘 다 매우 중요한 개체인 스트림에 의존합니다. 이것이 바로 박씨가 그의 책에서 언급하지 않은 것입니다.

버퍼파크 다다님이 책에서 언급하셨는데 실제로는 스트림이 Buffer를 처리하는 것이기 때문에 간략하게 정리가 필요합니다.

버퍼란 무엇입니까

공식 API에 소개된 것처럼 ES6에서 TypedArray를 도입하기 전에 JavaScript에는 바이너리 데이터 스트림을 읽거나 작동하는 메커니즘이 없었습니다. Buffer 클래스는 TCP 및 파일 스트림과 같은 네트워크 스트림과 상호 작용할 수 있도록 NodeJS API의 일부로 도입되었습니다.

이제 TypedArray가 ES6에 추가되었으므로 Buffer 클래스는 NodeJS 작업에 더 최적화되고 적합한 방식으로 Unit8Array API를 구현합니다.

간단히 말하면 Buffer 클래스는 바이너리 데이터를 처리하는 데 사용되는 클래스이기 때문에 전역 변수에 직접 배치하여 사용할 필요가 없습니다.

Buffer 클래스의 인스턴스는 정수 배열과 유사하지만 버퍼 크기는 생성될 때 결정되며 조정할 수 없습니다. Buffer 객체와의 차이점은 V8의 메모리 할당 메커니즘을 거치지 않는다는 점입니다. Buffer는 JavaScript와 C++를 결합한 모듈입니다. 메모리는 C++로 적용되고 JavaScript로 할당됩니다.

버퍼 메모리 할당과 관련된 지식에 대해서는 논의하지 않습니다. 관심 있는 학생들은 Park Laoshi의 책을 읽어보세요.

버퍼 인스턴스화

NodeJS v6 이전에는 생성자를 호출하여 버퍼를 인스턴스화하고 매개변수에 따라 다른 결과를 반환했습니다. 보안상의 이유로 이 메서드는 v6 이후 버전에서 폐지되었으며 세 가지 별도의 메서드가 제공됩니다:

  • Buffer.from()
  • Buffer.alloc()
  • Buffer.allocUnsafe()

명확한 책임이 있는 함수 버퍼 인스턴스화 작업을 처리합니다.

  • Buffer.from(array): 제공된 바이트의 복사본을 포함하는 버퍼를 반환합니다. 배열의 각 항목은 옥텟을 나타내는 숫자이므로 값은 0~255 사이여야 합니다. 그렇지 않으면 모듈로
  • Buffer가 됩니다. .from(arrayBuffer): 지정된 ArrayBuffer와 메모리를 공유하는 새 버퍼를 반환합니다.
  • Buffer.from(buffer): 지정된 버퍼의 복사본을 반환합니다. Buffer
  • Buffer.from(string [, 인코딩 ]): 버퍼를 반환합니다. 주어진 문자열을 포함
  • Buffer.alloc(size [, fill [, 인코딩]]): 지정된 크기와 "채워진" 버퍼를 반환합니다.
  • Buffer.allocUnsafe(size): 다양한 크기의 지정된 버퍼를 반환합니다. 콘텐츠는 buf.fill(0)과 같은 메서드를 사용하여 채워야 합니다.
// 0x 表示 16 进制

Buffer.from([1, 2, 3]) // [0x1, 0x2, 0x3]

Buffer.from('test', 'utf-8') // [0x74, 0x65, 0x73, 0x74]

Buffer.alloc(5, 1) // [0x1, 0x1, 0x1, 0x1, 0x1]

Buffer.allocUnsafe(5); // 值不确定,后面详谈
로그인 후 복사

Buffer.allocUnsafe()Buffer.alloc()보다 빠르게 실행됩니다. 이름은 안전하지 않습니다. , 실제로 안전하지 않습니다. Buffer.allocUnsafe() 的执行会快于 Buffer.alloc() 看名字很不安全,确实也不安全。

当调用 Buffer.allocUnsafe()

Buffer.allocUnsafe() 호출 시 할당된 메모리 세그먼트가 초기화되지 않아(0으로 반환되지 않음) 메모리 할당 속도가 매우 느리지만 할당된 메모리 세그먼트에 오래된 데이터가 포함될 수 있습니다. . 이러한 오래된 데이터를 덮어쓰지 않고 사용할 경우 메모리 누수가 발생할 수 있으므로 속도가 빠르더라도 사용을 자제하시기 바랍니다.

Encoding

Buffer는 다음 인코딩 형식을 지원합니다.
  • 문자열과 버퍼 비교 간단히 e
Buffer.from(string [, encoding])
로그인 후 복사
  • 동시에, 버퍼 인스턴스에는 여러 버퍼 인스턴스가 버퍼 인스턴스
  • buf.toString([encoding[, start[, end]]])
    로그인 후 복사
    e
  • stringCoder
  • Buffer.concat(list[, totalLength])
    로그인 후 복사
    e
  • stringCoder
  • 로 연결되어 있음을 나타내는 Concat 메서드를 사용하여 버퍼를 문자열
  • const buf = Buffer.from('中文字符串!');
    
    for(let i = 0; i < buf.length; i+=5){
      var b = Buffer.allocUnsafe(5);
      buf.copy(b, 0, i);
      console.log(b.toString());
    }
    로그인 후 복사
    E

    BUFFER 스티칭

    으로 변환하는 Tostring 메서드도 있습니다.

    한자는 3바이트로 표현됩니다. 한자를 처리할 때 3의 배수가 아닌 바이트 수를 사용하면 문자 연결 문제가 발생합니다.

    const StringDecoder = require('string_decoder').StringDecoder;
    const decoder = new StringDecoder('utf8');
    
    const buf = Buffer.from('中文字符串!');
    
    for(let i = 0; i < buf.length; i+=5){
      var b = Buffer.allocUnsafe(5);
      buf.copy(b, 0, i);
      console.log(decoder.write(b));
    }
    로그인 후 복사

    결과에서 문자가 깨져 보이는 것을 볼 수 있습니다

    하지만 string_decoder 모듈을 사용하면 이 문제를 해결할 수 있습니다

    rrreee

    StringDecoder 인코딩을 얻은 후에는 utf에서 wide 바이트가 3바이트를 차지한다는 것을 알 수 있습니다. 8 이므로 마지막에 불완전한 바이트를 처리할 때 두 번째 write()까지 유지됩니다. 현재는 UTF-8, Base64 및 UCS-2/UTF-16LE만 처리할 수 있습니다.

    Buffer에 일반적으로 사용되는 기타 API

    Buffer에 일반적으로 사용되는 API도 있습니다

    • Buffer.isBuffer: 개체가 Buffer인지 확인
    • Buffer.isEncoding: Buffer 개체의 인코딩 확인
    • buf.length: 바이트 수가 아닌 이 Buffer 인스턴스에 요청된 메모리 바이트 수를 반환합니다. Buffer 인스턴스의 내용
    • buf.indexOf: 배열의 indexOf와 유사하며 변경된 buf에서 특정 문자열, acsii 코드 또는 buf의 위치를 ​​반환합니다.
    • buf.copy: 내용의 일부를 복사합니다. of one buf to another buf

    자세히 보기 프로그래밍 관련 지식을 더 보려면 Programming Videos를 방문하세요! !

    위 내용은 NodeJS의 버퍼에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    nodejs와 tomcat의 차이점 nodejs와 tomcat의 차이점 Apr 21, 2024 am 04:16 AM

    Node.js와 Tomcat의 주요 차이점은 다음과 같습니다. 런타임: Node.js는 JavaScript 런타임을 기반으로 하는 반면 Tomcat은 Java Servlet 컨테이너입니다. I/O 모델: Node.js는 비동기식 비차단 모델을 사용하는 반면 Tomcat은 동기식 차단 모델을 사용합니다. 동시성 처리: Node.js는 이벤트 루프를 통해 동시성을 처리하는 반면 Tomcat은 스레드 풀을 사용합니다. 애플리케이션 시나리오: Node.js는 실시간, 데이터 집약적, 동시성 애플리케이션에 적합하고 Tomcat은 기존 Java 웹 애플리케이션에 적합합니다.

    nodejs와 vuejs의 차이점 nodejs와 vuejs의 차이점 Apr 21, 2024 am 04:17 AM

    Node.js는 서버측 JavaScript 런타임인 반면, Vue.js는 대화형 사용자 인터페이스를 생성하기 위한 클라이언트측 JavaScript 프레임워크입니다. Node.js는 백엔드 서비스 API 개발, 데이터 처리 등 서버 측 개발에 사용되고, Vue.js는 단일 페이지 애플리케이션, 반응형 사용자 인터페이스 등 클라이언트 측 개발에 사용됩니다.

    nodejs는 백엔드 프레임워크인가요? nodejs는 백엔드 프레임워크인가요? Apr 21, 2024 am 05:09 AM

    Node.js는 고성능, 확장성, 크로스 플랫폼 지원, 풍부한 생태계, 개발 용이성 등의 기능을 제공하므로 백엔드 프레임워크로 사용할 수 있습니다.

    nodejs는 백엔드 개발 언어인가요? nodejs는 백엔드 개발 언어인가요? Apr 21, 2024 am 05:09 AM

    예, Node.js는 백엔드 개발 언어입니다. 서버 측 비즈니스 로직 처리, 데이터베이스 연결 관리, API 제공 등 백엔드 개발에 사용됩니다.

    nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? Apr 21, 2024 am 05:18 AM

    Node.js 설치 디렉터리에는 npm과 npm.cmd라는 두 가지 npm 관련 파일이 있습니다. 차이점은 다음과 같습니다. 확장자가 다릅니다. npm은 실행 파일이고 npm.cmd는 명령 창 바로 가기입니다. Windows 사용자: npm.cmd는 명령 프롬프트에서 사용할 수 있으며, npm은 명령줄에서만 실행할 수 있습니다. 호환성: npm.cmd는 Windows 시스템에만 해당되며 npm은 크로스 플랫폼에서 사용할 수 있습니다. 사용 권장사항: Windows 사용자는 npm.cmd를 사용하고, 기타 운영 체제는 npm을 사용합니다.

    nodejs의 전역 변수는 무엇입니까 nodejs의 전역 변수는 무엇입니까 Apr 21, 2024 am 04:54 AM

    Node.js에는 다음과 같은 전역 변수가 존재합니다. 전역 개체: 전역 핵심 모듈: 프로세스, 콘솔, 필수 런타임 환경 변수: __dirname, __filename, __line, __column 상수: undefine, null, NaN, Infinity, -Infinity

    nodejs와 java 사이에 큰 차이가 있나요? nodejs와 java 사이에 큰 차이가 있나요? Apr 21, 2024 am 06:12 AM

    Node.js와 Java의 주요 차이점은 디자인과 기능입니다. 이벤트 중심 대 스레드 중심: Node.js는 이벤트 중심이고 Java는 스레드 중심입니다. 단일 스레드 대 다중 스레드: Node.js는 단일 스레드 이벤트 루프를 사용하고 Java는 다중 스레드 아키텍처를 사용합니다. 런타임 환경: Node.js는 V8 JavaScript 엔진에서 실행되는 반면 Java는 JVM에서 실행됩니다. 구문: Node.js는 JavaScript 구문을 사용하고 Java는 Java 구문을 사용합니다. 목적: Node.js는 I/O 집약적인 작업에 적합한 반면, Java는 대규모 엔터프라이즈 애플리케이션에 적합합니다.

    nodejs 프로젝트를 서버에 배포하는 방법 nodejs 프로젝트를 서버에 배포하는 방법 Apr 21, 2024 am 04:40 AM

    Node.js 프로젝트의 서버 배포 단계: 배포 환경 준비: 서버 액세스 권한 획득, Node.js 설치, Git 저장소 설정. 애플리케이션 빌드: npm run build를 사용하여 배포 가능한 코드와 종속성을 생성합니다. Git 또는 파일 전송 프로토콜을 통해 서버에 코드를 업로드합니다. 종속성 설치: SSH를 서버에 연결하고 npm install을 사용하여 애플리케이션 종속성을 설치합니다. 애플리케이션 시작: node index.js와 같은 명령을 사용하여 애플리케이션을 시작하거나 pm2와 같은 프로세스 관리자를 사용합니다. 역방향 프록시 구성(선택 사항): Nginx 또는 Apache와 같은 역방향 프록시를 사용하여 트래픽을 애플리케이션으로 라우팅합니다.

    See all articles