Buffers
El contenedor binario que Eco utiliza para leer y escribir datos de red.
Buffers
Buffer combina un flujo de memoria con las operaciones de BinaryWriter y BinaryReader. Es la pieza que Eco utiliza para construir, leer, copiar y reciclar datos binarios.
Dato
↓
Buffer
├── escribir
├── leer
└── reciclar
↓
PaqueteEscritura y lectura
El ciclo básico es:
var buffer = Buffer.Create();
var writer = buffer.BeginWriting();
writer.Write(123);
writer.Write("Hola");
buffer.EndWriting();
var reader = buffer.BeginReading();
int numero = reader.ReadInt32();
string texto = reader.ReadString();El buffer controla internamente la posición y el tamaño útil de los datos.
Modos del buffer
BeginWriting prepara el buffer para escribir y EndWriting finaliza esa fase. BeginReading cambia al modo de lectura y permite consumir los bytes existentes.
Esto permite reutilizar la misma abstracción tanto para paquetes salientes como para datos recibidos.
Tamaño y posición
Las propiedades principales son:
| Propiedad | Significado |
|---|---|
size | Cantidad de datos útiles. |
position | Posición actual del flujo. |
stream | MemoryStream subyacente. |
buffer | Array interno que contiene la memoria. |
isWriting | Indica si está en modo escritura. |
Copia
CopyTo permite copiar el contenido útil de un buffer a otro, evitando arrastrar espacio no utilizado del MemoryStream.
Reciclado
Eco puede reutilizar buffers para reducir asignaciones. Recycle() devuelve el buffer al pool cuando el reciclado está habilitado.
Crear
↓
usar
↓
Recycle
↓
pool
↓
Create
↓
reutilizarEl código también incorpora comprobaciones de depuración para detectar usos incorrectos y dobles reciclados cuando las opciones correspondientes están habilitadas.
Seguridad del reciclado
Un buffer reciclado no debe utilizarse posteriormente como si siguiera siendo válido. Las rutas de depuración de Eco permiten detectar esta clase de error.
Por eso las funciones que reciben un Buffer deben dejar claro quién posee su ciclo de vida.
Buffer y Datagramas
El mismo sistema de reciclado puede utilizarse con Datagrama, evitando crear memoria constantemente durante tráfico frecuente.
Relación con paquetes
Un Paquete define el significado de los bytes; un Buffer proporciona el espacio y las operaciones para escribirlos.
Paquete
│
└── BeginPacket()
↓
Buffer
↓
BinaryWriterRelación con TNet
Buffer es la evolución renombrada de TNBuffer. La arquitectura de pool, lectura/escritura y reciclado procede de TNet, mientras que la nomenclatura de Eco es la API utilizada por Pandora.
Buffer.cs · Eco
Implementación del buffer binario.
TNet
Repositorio upstream.
