Quiero emular una transmisión de tipo de red en una sola PC.Stream que tiene posiciones de escritura y lectura separadas
He hecho esto creando un Stream
que toma en 2 flujos subyacentes, uno para leer y otro para escribir.
Luego creo 2 instancias de esta clase intercambiando las 2 transmisiones. Actualmente estoy usando MemoryStream
s como las 2 transmisiones subyacentes.
El problema que tengo ahora es que si escribo X bytes en un MemoryStream
, entonces su posición será X y si hago un Read
no obtendré datos, ya que estoy al final de la transmisión.
Dado que normalmente haré un par de lecturas/escrituras (así que no puedo simplemente restablecer la posición a 0 después de cada escritura) ¿qué puedo usar Stream
para obtener este comportamiento?
Efectivamente quiero un tipo de cola de bytes en la que pueda escribir y leer en forma de una secuencia.
decir (haciendo caso omiso de los argumentos de métodos reales)
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 }
El único problema es que este código no es seguro para subprocesos. Si está utilizando este código con múltiples hilos, querrá asegurarse de que nada intente llamar a leer y escribir al mismo tiempo. Sobre los métodos de lectura y escritura, puede agregar [MethodImpl (MethodImplOptions.Synchronized)] para que sea (thread) seguro. – Qubei