7
단일 PC에서 네트워크 유형 스트림을 에뮬레이트하려고합니다.별도의 쓰기 및 읽기 위치가있는 스트림
나는 두 개의 기본 스트림 (하나는 읽고 쓰고 다른 하나는 쓰는)을 사용하는 Stream
을 생성하여이 작업을 수행했습니다.
다음 두 스트림을 스왑하는이 클래스의 인스턴스를 2 개 만듭니다. 현재 MemoryStream
을 2 개의 기본 스트림으로 사용하고 있습니다.
내가 지금 가지고있는 문제는 X 바이트를 MemoryStream
에 쓰면 그 위치는 X가 될 것이고, 그렇다면 내가 할 일은 Read
이다. 나는 스트림의 끝에있다.
필자는 일반적으로 몇 가지 읽기/쓰기 작업을 수행합니다. 따라서 모든 동작 후에 0으로 재설정 할 수는 없습니다. 무엇이 Stream
이 동작을 얻으려면 사용할 수 있습니까?
효율적으로 쓸 수 있고 스트림 형태로 읽을 수있는 일종의 바이트 대기열이 필요합니다.
즉 (무시 실제 메소드 인수) 그것은 (어쨌든 내 경우) 실제로 내가 생각했던 것보다 훨씬 간단MyStream.Write({ 1, 2, 3, 4, 5, 6 });
MyStream.Write({ 7, 8 });
MyStream.Read(3) // Returns { 1, 2, 3 }
MyStream.Read(4) // Returns { 4, 5, 6, 7 }
만 문제는이 코드는 스레드로부터 안전하지 않습니다이다. 이 코드를 여러 스레드와 함께 사용하는 경우에는 아무 것도 동시에 읽기 및 쓰기 호출을 시도하지 않아야합니다. 읽기 및 쓰기 메소드 위에 [MethodImpl (MethodImplOptions.Synchronized)]를 추가하여 (스레드) 안전하게 할 수 있습니다. – Qubei