node.js의 파일 흐름에 대한 심층 분석

青灯夜游
풀어 주다: 2021-11-23 17:58:20
앞으로
2251명이 탐색했습니다.

이 기사는 Nodejs의 파일 흐름을 분석하는 데 도움이 되기를 바랍니다.

node.js의 파일 흐름에 대한 심층 분석

파일 스트림

컴퓨터에 있는 다양한 미디어의 읽기 및 저장 속도와 용량이 다르기 때문에 작업 중에 한 당사자가 장기간 대기 상태에 있을 수 있습니다

파일에는 세 가지 주요 유형이 있습니다. 스트림, 즉 입력 스트림(읽기 가능) , 출력 스트림(쓰기 가능) , 이중 스트림(이중) . 일반적으로 사용되지 않는 또 다른 종류의 스트림이 있습니다. 즉, Transform stream(Transform)转换流(Transform)

node 中提供了 stream 模块,这个模块中有两个类实例:Readable 和 Writable,流中都会继承这两个类,因此会有很多共同的方法等。

可读流(Readable)

输入流:数据从源头流向内存,把磁盘里面的数据传输到内存里面。

createReadStream

fs.createReadStream(路径, 配置)

node

에 스트림 모듈을 제공합니다. 이 모듈에는 읽기 가능 및 쓰기 가능이라는 두 가지 클래스 인스턴스가 있습니다. 따라서 둘 다 스트림에 의해 상속됩니다. 따라서 이 두 클래스에는 많은 공통 메서드 등이 있습니다.

읽기 가능한 스트림(Readable)

입력 스트림: 데이터는 소스에서 메모리로 흘러 디스크에서 메모리로 데이터를 전송합니다.

createReadStream

fs.createReadStream(경로, 구성)

구성에는 다음이 있습니다: 인코딩(인코딩 방법), 시작(바이트 읽기 시작) ), end(읽은 바이트의 끝), highWaterMark(각 읽은 양)

highWaterMark: 인코딩에 값이 있으면 숫자는 문자 수를 나타내고, 인코딩이 null이면 숫자는 바이트 수를 나타냅니다.

반환 읽기 가능한 하위 클래스 ReadStream

const readable = fs.createReadStream(filename, { 인코딩: 'utf-8', 시작: 1, 끝: 2, // 하이워터마크: });

이벤트 등록

readable.on(이벤트 이름, 핸들러 함수)

readable.on('open', (err, data)=> {
    // console.log(err);
    console.log('文件打开了');
})

readable.on('error', (data, err) => {
    console.log(data, err);
    console.log('读取文件发生错误');
})

readable.on('close', (data, err) => {
    // console.log(data, err);
    console.log('文件关闭');
})

readable.close() // 手动触发通过 readable.close()或者在文件读取完毕之后自动关闭--autoClose配置项默认为 true

readable.on('data', (data) => {
    console.log(data);
    console.log('文件正在读取');
})

readable.on('end', ()=>{
    console.log('文件读取完毕');
})
로그인 후 복사

읽기 일시 정지

readable.pause() 읽기 일시 정지, 일시 정지 이벤트가 발생합니다

읽기 재개

readable.resume()을 사용하여 읽기를 재개하면 재개 이벤트

writable stream

const ws = fs.createWriteStream(filename[,configuration])

ws.write(data)가 트리거됩니다.

데이터를 쓰세요. 데이터는 문자열이나 버퍼일 수 있으며 부울 값을 반환합니다.

true가 반환되면 쓰기 채널이 가득 차지 않았음을 의미하며, 다음 데이터를 직접 쓸 수 있다는 의미입니다. 쓰기 채널은 구성에서 highWaterMark로 표시되는 크기입니다.

writeFilereadFilefalse가 반환되면 쓰기 채널이 가득 차서 나머지 문자가 대기하기 시작하여 역압이 발생한다는 의미입니다.

const ws = fs.createWriteStream(filename, {
    encoding: 'utf-8',
    highWaterMark: 2
})

const flag = ws.write('刘');
console.log(flag); // false 
这里虽然只会执行一次,但是在通道有空余空间的时候就会继续写入,并不在返回 值。

ws.write() 只会返回一次值。


const flag = ws.write('a');
console.log(flag);
const flag1 = ws.write('a');
console.log(flag1);
const flag2 = ws.write('a');
console.log(flag2);
const flag3 = ws.write('a');
console.log(flag3);

输出顺序:true、false、false、false

第二次写入的时候已经占了两字节,第三次写入后直接占满了,所以返回false
로그인 후 복사

스트림을 사용하여 파일 복사 및 붙여넣기 및 역압 문제 해결

pipe🎜🎜🎜파이프를 사용하면 읽기 가능한 스트림과 쓰기 스트림을 직렬로 직접 연결할 수도 있고 역압 문제도 해결할 수 있습니다. 🎜
rs.pipe(ws);

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})
로그인 후 복사
🎜알아보세요, 많은 양의 파일을 읽고 쓸 때 파일 스트리밍이 매우 편리하고, 빠르고 효율적일 수 있다는 것을 느꼈습니다. 올바르게 처리되었습니다. 🎜🎜노드 관련 지식을 더 보려면 🎜nodejs 튜토리얼🎜을 방문하세요! ! 🎜

위 내용은 node.js의 파일 흐름에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿