버퍼 모듈
JS는 원래 브라우저 용으로 설계되었으므로 유니 코드 인코딩 문자열을 잘 처리 할 수 있지만 이진 데이터를 잘 처리 할 수는 없습니다. Node.js는 네트워크에서 이진 형식으로 종종 전송되는 데이터를 보내고 수신하도록 설계 되었기 때문에 Node.js의 문제입니다. 예를 들어:
- TCP 연결을 통해 데이터를 보내고 수신합니다.
- 이미지 또는 압축 파일에서 이진 데이터를 읽습니다.
- 파일 시스템에서 데이터를 읽고 쓰십시오.
- 네트워크에서 이진 데이터 스트림을 처리합니다
버퍼 모듈은 원시 데이터를 저장하기 위해 Node.js에 메소드를 가져 오므로 JS의 맥락에서 바이너리 데이터를 사용할 수 있습니다. I/O 작업에서 데이터를 이동할 때마다 Node.js에서 처리해야 할 때마다 버퍼 모듈을 사용할 수 있습니다.
클래스 : 버퍼
버퍼 클래스는 이진 데이터를 직접 처리하는 데 사용되는 전역 변수 유형입니다. 다양한 방식으로 건축 할 수 있습니다.
원시 데이터는 버퍼 클래스의 인스턴스에 저장됩니다. 버퍼 인스턴스는 정수 배열과 유사합니다.
1. New 버퍼 (크기) : 크기가 크기 인 새로운 버퍼 크기 8 비트 바이트를 할당하십시오.
2. New Buffer (Array) : 8 비트 바이트 어레이를 사용하려면 새 버퍼를 할당합니다.
3.New Buffer (str, [Encoding]) : 인코딩 문자열 유형-인코딩 메소드가 사용되며 매개 변수는 선택 사항입니다.
4. 클래스 메소드 : buffer.isencoding (인코딩) : 주어진 인코딩 인코딩이 유효 한 경우 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
5. 클래스 방법 : buffer.isbuffer (OBJ) :이 OBJ가 버퍼인지 테스트하십시오. 부울을 반환합니다
6. 클래스 메소드 : buffer.concat (list, [Tetallength]) : List {array} 배열 유형, 버퍼 배열, 연결되었습니다. 총 길이 {number} 위 버퍼 배열의 모든 버퍼의 총 크기 유형.
버퍼 인스턴스를 얻기 위해 파일을 읽는 것 외에도 다음과 같은 직접 구성 할 수 있습니다.
코드 사본은 다음과 같습니다.
var bin = 새로운 버퍼 ([0x48, 0x65, 0x6c, 0x6c, 0x6c]);
버퍼는 문자열과 유사합니다. .length 속성을 사용하여 바이트 길이를 얻는 것 외에도 [index] 메소드를 사용하여 지정된 위치에서 바이트를 읽을 수도 있습니다.
코드 사본은 다음과 같습니다.
빈 [0]; // => 0x48;
버퍼와 스트링은 서로 변환 될 수 있습니다. 예를 들어, 이진 데이터는 지정된 인코딩을 사용하여 문자열로 변환 될 수 있습니다.
코드 사본은 다음과 같습니다.
var str = bin.tostring ( 'utf-8'); // => "안녕하세요"
새 버퍼를 반환하는 대신 .slice 메소드는 아래와 같이 원래 버퍼 중간의 위치로 포인터를 반환합니다.
코드 사본은 다음과 같습니다.
1. [0x48, 0x65, 0x6c, 0x6c, 0x6c]
2. ^ ^
3. | |
4. Bin Bin.slice (2)
버퍼에 쓰십시오
코드 사본은 다음과 같습니다.
var 버퍼 = 새 버퍼 (8); // 할당 된 8 바이트의 메모리로 버퍼를 만듭니다.
console.log (buffer.write ( 'a', 'utf8')); // 출력 1
이것은 문자 "a"를 버퍼에 쓰고 노드는 인코딩 된 후 버퍼에 기록 된 바이트 수를 반환합니다. 문자 A의 UTF-8 인코딩은 1 바이트를 차지합니다.
버퍼를 복사하십시오
node.js는 버퍼 객체의 전체 내용을 다른 버퍼 객체에 복사하는 메소드를 제공합니다. 기존 버퍼 객체들 사이에서만 복사 할 수 있으므로 만들어야합니다.
코드 사본은 다음과 같습니다.
Buffer.copy (Buffertocopyto)
그중에서도 Buffertocopyto는 복사 할 대상 버퍼 객체입니다. 다음 예제 :
코드 사본은 다음과 같습니다.
var buffer1 = 새로운 버퍼 (8);
buffer1.write ( '만나서 반갑습니다', 'utf8');
var buffer2 = 새로운 버퍼 (8);
버퍼 1.copy (buffer2);
console.log (buffer2.toString ()); // 만나서 반갑습니다
스트림 모듈
UNIX 유형 운영 체제에서 스트리밍은 표준 개념입니다. 다음과 같이 세 가지 주요 스트림이 있습니다.
1. 표준 입력
2. 표준 출력
3. 표준 오류
읽기 쉬운 스트림
버퍼가 node.js가 원시 데이터를 처리하는 방식 인 경우 스트림은 일반적으로 Node.js가 데이터를 이동하는 방식입니다. Node.js의 스트림은 읽을 수 있거나 쓸 수 있습니다. Node.js의 많은 모듈은 HTTP 및 파일 시스템을 포함한 스트림을 사용합니다.
Classmates.txt 파일을 작성 하고이 데이터를 사용할 수 있도록 이름 목록을 읽으십시오. 데이터는 스트림이므로 파일 읽기를 완료하기 전에 처음 몇 바이트의 데이터에 동행 할 수 있음을 의미합니다. 이것은 node.js의 일반적인 패턴입니다.
코드 사본은 다음과 같습니다.
var fs = 요구 ( 'fs');
var stream = fs.readstream ( 'classmates.txt');
setencoding ( 'utf8');
stream.on ( 'data', function (chunk) {
Console.log ( '일부 데이터 읽기')
});
stream.on ( 'close', function () {
console.log ( '모든 데이터가 읽습니다')
});
위의 예에서는 새로운 데이터가 수신되면 이벤트 데이터가 트리거됩니다. 파일 읽기가 완료되면 마감 이벤트가 트리거됩니다.
쓰기 가능한 스트림
분명히, 우리는 또한 데이터를 작성하기 위해 쓰기 가능한 스트림을 만들 수 있습니다. 즉, 간단한 스크립트 만 사용하여 파일을 읽고 다른 파일에 쓸 수 있습니다.
코드 사본은 다음과 같습니다.
var fs = 요구 ( 'fs');
var readableStream = fs.ReadStream ( 'classmates.txt');
var writableStream = fs.Writestream ( 'names.txt');
readableStream.setencoding ( 'utf8');
readableStream.on ( 'data', function (chunk) {
WritableStream.write (Chunk);
});
readableStream.on ( 'close', function () {
WritableStream.end ();
});
이제 데이터 이벤트가 수신되면 데이터가 쓰기 가능한 스트림에 기록됩니다.
readable.setencoding (인코딩) : return : this
readable.resume () : 위와 동일합니다. 이 방법을 사용하면 읽기 쉬운 스트림이 데이터 이벤트를 계속 트리거 할 수 있습니다.
readable.pause () : 위와 동일합니다. 이 방법으로 인해 흐름 모드의 스트림이 데이터 이벤트 트리거 트리거를 중지하고 플로우 모드가 아닌 모드로 전환하며 이후 사용 가능한 데이터를 내부 버퍼에 남겨 둡니다.
클래스 : stream.Writable
쓰기 가능한 스트림 인터페이스는 대상에 쓰는 데이터의 추상화입니다.
1.Write.write (청크, [인코딩], [콜백]) :
청크 {문자열 | 버퍼} 작성 될 데이터
chunk가 문자열 인 경우 {string} 인코딩 인코딩
콜백 {function} 데이터 블록 쓰기 후 콜백
반품 : {boolean} true 데이터가 모두 처리 된 경우.
이 메소드는 데이터를 기본 시스템에 작성하고 데이터가 처리 된 후 주어진 콜백을 호출합니다.
2.Writable.cork () : 모든 쓰기를 강요해야합니다.
고정 된 데이터는 .uncork () 또는 .end () 호출이 호출 될 때 작성됩니다.
3.Writable.end ([Chunk], [인코딩], [Callback])
청크 {문자열 | 버퍼} 선택 사항, 작성할 데이터
chunk가 문자열 인 경우 {string} 인코딩 인코딩
콜백 {function} 선택 사항, 스트림이 종료 된 후 콜백
end ()을 호출 한 후 write () 호출은 오류가 발생합니다.
코드 사본은 다음과 같습니다.
// '안녕하세요'를 쓰고 '세상!'으로 끝납니다.
http.createserver (function (req, res) {
res.write ( 'hello,');
Res.end ( 'World!');
// 이제 계속 쓸 수 없습니다
});