2014-07-01 5 views
0

질문은 실제로 이미 Brad에 의해 질문됩니다. 그러나 나는 아직 실제로 질문을 찾지 못했습니다. 읽을 수있는 이벤트 핸들러 내부에 readable.read()을 반복적으로 호출해야합니까? 현재 노드 문서에서 예제 코드는 다음과 같이 읽습니다.Node.js 스트림 readable.read 반복적으로 호출

var readable = getReadableStreamSomehow(); 
readable.on('readable', function() { 
    var chunk; 
    while (null !== (chunk = readable.read())) { 
    console.log('got %d bytes of data', chunk.length); 
    } 
}); 

readable.read()이 반복적으로 호출됩니다. 더 많은 데이터를 사용할 수있을 때

내부 버퍼가 배출되면, 읽을 수있는 이벤트가 다시 발생합니다

문서는 이것에 대해 읽을 수있는 이벤트가 말한다. 당신이 크기 인수를 지정하지 않으면

, 그때는 내부 버퍼에 모든 데이터를 반환합니다

그것은이 약 read() 말한다.

while 루프에서 반복적으로 호출하여 read()을 호출해야하는 경우가 있습니까? 읽기가 결코 null을 반환하지 않는 경우 모든

답변

1

우선,이 서버가 차단하게됩니다 : 당신이 크기 인수를 지정하지 않으면

while (null !== (chunk = readable.read())) { 
    console.log('got %d bytes of data', chunk.length); 
    } 

하면, 당신은 단지마다 한 번씩 읽어 호출 할 필요가있는 '읽기' 이벤트가 시작되었습니다. 크기를 지정하고 크기가 읽을 전체 데이터 양보다 작 으면 필요한만큼 여러 번 호출해야합니다.

더 이상 데이터를 사용할 수없는 경우를 알 수있는 readable.on('end', ...이 있습니다.

+0

그런 다음 설명서의 예제가 수정되어 나타납니다. – huggie

+0

예상 된 v.10 릴리스 (https://dl.dropboxusercontent.com/u/3685/presentations/streams2/streams2-ko.pdf) 이전의 대화에 따르면 null을 반환하는 것은 사양의 일부입니다. 읽을 수있는 이벤트는 null을 반환 한 후에 만 ​​발생합니다. 어쩌면 의사가 while 루프를 사용하는 이유 일 수 있습니다. 어쩌면 그게 왜 필요한거야? 비어있을 때까지 읽지 않으면 null이 반환되지 않았기 때문입니다. – huggie

+0

어쨌든, 다른 readble 이벤트 전에 readable.read()가 반환해야하는 null이 버퍼가 비어 있다는 사실 만 문서에 확실히 반영되지 않습니다. – huggie

0

개체 모드에서 .read()은 개체를 반환하기 때문에이 작업이 필요합니다. 이 바이너리 스트림에 필요한 경우 확실하지 않지만 성공적으로 이벤트 당 .read() 호출했습니다.