2009-02-26 2 views
2

이전 질문에서, 다른 두 스트림에 .NET 스트림을 동시에 작성할 수 있다고하는 의견이 있습니다. 한 가지 방법을 찾을 수 있지만 입력 스트림의 내용을 (전체 또는 부분적으로) 저장하는 임시 변수 (버퍼)를 사용하면됩니다.버퍼를 사용하지 않고 .NET 스트림을 다른 두 스트림에 동시에 쓰는 방법은 무엇입니까?

  1. 버퍼를 사용하지 않고이를 수행 할 수있는 방법이 있습니까?
  2. 동시에 수행 할 수있는 방법이 있습니까?

답변

5

버퍼를 사용하면 스트림이 적절한 비동기 액세스를 지원한다고 가정 할 때 두 스트림 모두에 비동기 적으로 쓸 수 있습니다. 그것은 사실상 동시 적입니다.하지만 다른 버퍼가 그렇게하기 전에 오랜 시간 동안 첫 버퍼를 쓰는 것을 끝내면 모든 버퍼를 동기화 된 상태로 유지하는 것이 까다로울지라도 말입니다.

적어도 한 바이트 이상의 버퍼를 사용하지 않고 한 (일반) 스트림에서 다른 스트림으로 복사 할 수있는 방법이 없다는 것을 알고있는 한. (단 하나의 바이트 만 사용하면 고통스럽게 비효율적입니다.)

4

동시성을 가장 느린 스트림의 속도로 제한하면 매우 간단하며 추가 버퍼가 필요하지 않습니다. 필자는이를 작성했습니다 기억에서 그렇게 조금 엉망이되었을 수도 있습니다.

또한 CanRead, CanSeek 등과 같은 것들이 모두 단순화를 위해 건너 뛴다. 핵심 동시 쓰기 만 수행된다.

+0

Genious! 고맙습니다 –

관련 문제