2014-11-10 3 views
1

나와 함께 곰이 하나주세요.MSStream - 중요한 점은 무엇입니까?

WinJS.xhr 응답의 응답을 설정할 때 'ms-stream'또는 blob로 설정할 수 있습니다. 나는 전체적인 응답을 메모리에 유지할 필요가없는 방식으로 파일을 다운로드 할 때 스트림 컨셉을 활용하기를 바랬다 (비디오 파일은 거대 할 수있다).

그러나 MSStreamReader를 사용하여 'ms-stream'개체를 읽을 수 있습니다. 스트림에서 1024 바이트를 소비하고 스트림이 고갈 될 때까지 '반복'한다고 말하면 좋을 것입니다. 그러나 문서를 읽는 것만으로 (이 작업을 시도하지 않았으므로 내가 틀렸다면 올바르게 수정합니다.) 한 번만 스트림 (예 : readAsBlob 메서드)에서 읽을 수 있고 시작 위치를 설정할 수없는 것 같습니다. 즉, 전체 응답을 blob로 메모리에 읽어야합니다. 처음에는 responseType을 'blob'로 설정하여 달성 할 수 있습니다. 어쨌든 MSStream의 요점은 무엇입니까?

+0

하나의 차이점은 progress 이벤트가 'ms-stream'응답에 대해 여러 번 발생하고 'arraybuffer'응답에 대해 한 번 또는 전혀 (WinJS 2.0에만 해당) 발생한다는 것입니다. – alh84001

답변

0

나는 WinRT 및 JavaScript 응용 프로그램의 호스트에서 발생하는 MSStream 및 기타 이상한 개체 유형에 대한 질문에 대답하는 데 도움이되는 블로그 게시물을 작성했습니다. http://www.kraigbrockschmidt.com/2013/03/22/msstream-blob-objects-html5/을 참조하십시오. 예, MSStreamReader를 사용하여 일부 작업 (동기 API)을 할 수 있지만 MSStream을 URL.createObjectURL에 전달하여 img.src 등에 할당 할 수도 있습니다.

MSStream을 사용하면 다음과 같이 작성할 수 있습니다. "MSStream은 기술적으로 WinRT와의 interop을 제공하는 HTML5 File API의 확장입니다 .HTML5 API에서 MSStream (또는 Blob) 객체를 가져올 때 (예 : responseType이있는 XmlHttpRequest 파일이나 비디오를 다운로드 할 때 사용하는 것처럼 "ms-stream"을 사용하거나 캔버스의 msToBlob 메서드에서 가져온 결과를 IInputStream 또는 IRandomAccessStream을 입력으로 사용할 수있는 다양한 WinRT API에 전달할 수 있습니다. msToBlob의 blob에있는 msRandomAccessStream은 Windows.Graphics.Imaging에서 변환 또는 트랜스 코딩을위한 API로 제공 될 수 있습니다. 비디오 스트림은 Windows.Media.Transcoding의 API를 사용하여 비슷하게 작업 할 수 있습니다. StorageFile (반드시 파일 시스템에있는 것은 아님)에 스트림 내용을 저장하거나 암호화를 위해 버퍼에 복사하십시오. "

그래서 MSStreamReader가 전체가 아닙니다. MSStream의 실제 사용은 앞서 언급 한 인터페이스 유형을 허용하는 WinRT API에 개체를 전달하는 것이므로 많은 가능성을 열어줍니다.

틀림없이 이것은 문서화가 잘 안되는 영역이므로 파일, 스트림, 버퍼 및 블롭에 대한 Q & A라는 제목으로 내 일련의 게시물을 작성한 것입니다 (초기 게시물은 http://www.kraigbrockschmidt.com/2013/03/18/why-doesnt-storagefile-close-method/에 있습니다).

+0

예. 일련의 기사가 winjs 스트림 winrt 등의 조합을 포함하는 검색 상단에 있습니다. 얼마나 도움이되는지 충분히 강조 할 수 없습니다. 아마도이 개체 중 일부의 용도와 목적을 문서화 한 곳일뿐입니다. 그러나 실제로 "스트림 분리"가 의미하는 것이 무엇인지 명확하지 않았으며 MSStream이 닫혀 다운로드가 취소되고 그 시점까지의 데이터를 IInputStream에서 사용할 수 있다고 생각했습니다. 분명히 이것은 잘못된 것이고 IInputStream은 MSStream 아래에 있습니다. 한 번 더, 기사 덕분에, 그들은 (다른 사람들과 함께) 매우 귀중한되었습니다. – alh84001

1

글쎄, 방법 msDetachStream은 기본 스트림에 대한 액세스를 제공하고 다운로드 프로세스를 방해하지 않는다는 것이 밝혀졌습니다. 나는 처음에 문서를 MSStream 개체가 닫혀 있다고 언급 이후 이것을 호출하면 다운로드되지 않은 데이터가 손실되었다고 생각했습니다.