이 기사는 Nodejs의 파일 흐름을 분석하는 데 도움이 되기를 바랍니다.
컴퓨터에 있는 다양한 미디어의 읽기 및 저장 속도와 용량이 다르기 때문에 작업 중에 한 당사자가 장기간 대기 상태에 있을 수 있습니다
파일에는 세 가지 주요 유형이 있습니다. 스트림, 즉 입력 스트림(읽기 가능) , 출력 스트림(쓰기 가능) , 이중 스트림(이중) . 일반적으로 사용되지 않는 또 다른 종류의 스트림이 있습니다. 즉, Transform stream(Transform)
转换流(Transform)
在 node 中提供了 stream 模块,这个模块中有两个类实例:Readable 和 Writable,流中都会继承这两个类,因此会有很多共同的方法等。
输入流:数据从源头流向内存,把磁盘里面的数据传输到内存里面。
fs.createReadStream(路径, 配置)
node
에 스트림 모듈을 제공합니다. 이 모듈에는 읽기 가능 및 쓰기 가능이라는 두 가지 클래스 인스턴스가 있습니다. 따라서 둘 다 스트림에 의해 상속됩니다. 따라서 이 두 클래스에는 많은 공통 메서드 등이 있습니다.입력 스트림: 데이터는 소스에서 메모리로 흘러 디스크에서 메모리로 데이터를 전송합니다.createReadStream
fs.createReadStream(경로, 구성)
구성에는 다음이 있습니다: 인코딩(인코딩 방법), 시작(바이트 읽기 시작) ), end(읽은 바이트의 끝), highWaterMark(각 읽은 양)
highWaterMark: 인코딩에 값이 있으면 숫자는 문자 수를 나타내고, 인코딩이 null이면 숫자는 바이트 수를 나타냅니다. 반환 읽기 가능한 하위 클래스 ReadStreamconst 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.resume()을 사용하여 읽기를 재개하면 재개 이벤트
writable stream
const ws = fs.createWriteStream(filename[,configuration])
ws.write(data)가 트리거됩니다.
데이터를 쓰세요. 데이터는 문자열이나 버퍼일 수 있으며 부울 값을 반환합니다. true가 반환되면 쓰기 채널이 가득 차지 않았음을 의미하며, 다음 데이터를 직접 쓸 수 있다는 의미입니다. 쓰기 채널은 구성에서 highWaterMark로 표시되는 크기입니다.writeFile
和readFile
false가 반환되면 쓰기 채널이 가득 차서 나머지 문자가 대기하기 시작하여 역압이 발생한다는 의미입니다.
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
rs.pipe(ws); rs.on('close', () => { ws.end(); console.log('copy end'); })
위 내용은 node.js의 파일 흐름에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!