2014-11-04 3 views
1

스트림에서 3 바이트를 읽는 https://github.com/substack/stream-handbook 코드를 찾았습니다. 그리고 어떻게 작동하는지 이해할 수 없습니다.스트림 읽기 (0) 명령

process.stdin.on('readable', function() { 
    var buf = process.stdin.read(3); 
    console.log(buf); 
    process.stdin.read(0); 
}); 

는 다음과 같이 호출되는 :

(echo abc; sleep 1; echo def; sleep 1; echo ghi) | node consume.js 

그것은 반환 : 모든

<Buffer 61 62 63> 
<Buffer 0a 64 65> 
<Buffer 66 0a 67> 
<Buffer 68 69 0a> 

첫째, 내가 왜이 .read(0) 일을해야합니까? 스트림에 .read(size)을 요청할 때까지 나머지 데이터가 저장되는 버퍼가 있습니까? 하지만 .read(0)없이 인쇄됩니다.

<Buffer 61 62 63> 
<Buffer 0a 64 65> 
<Buffer 66 0a 67> 

왜?

두 번째는 sleep 1입니다. 내가

(echo abc; echo def; echo ghi) | node consume.js 

없이 스크립트를 호출하는 경우는 상관없이 내가 .read(0) 여부를 사용할

<Buffer 61 62 63> 
<Buffer 0a 64 65> 

를 인쇄 할 수 있습니다. 나는 이것을 완전히 이해하지 못한다. 이러한 결과를 인쇄하기 위해 여기서 어떤 논리가 사용됩니까?

답변

1

나는 https://github.com/substack/stream-handbook 정확히 저자가 읽기 (0) 방법을 사용하여 보여 주려고 대해 잘 모르겠지만, 이것이 올바른 접근 방법이다 IMHO :

process.stdin.on('readable', function() { 
    let buf; 
    // Every time when the stream becomes readable (it can happen many times), 
    // read all available data from it's internal buffer in chunks of any necessary size. 
    while (null !== (buf = process.stdin.read(3))) { 
    console.dir(buf); 
    } 
}); 

당신은 청크 크기를 변경할 수 있으며, 통과 수면 또는 수면 입력 ...