Red de conocimiento informático - Problemas con los teléfonos móviles - [Análisis del código fuente de Netty]ByteBuf(1)

[Análisis del código fuente de Netty]ByteBuf(1)

ByteBuf ayuda a las operaciones de lectura y escritura a través de dos punteros. Las operaciones de lectura usan ReaderIndex y las operaciones de escritura usan WriterIndex.

Los valores iniciales de ReaderIndex y WriterIndex son 0. Al escribir datos. , WriterIndex aumenta al recuperar datos, ReaderIndex aumenta, pero ReaderIndex no excederá WriterIndex.

Después de leer, el espacio entre 0-readerIndex se considera descartado. Llamar al método descartaReadByte puede liberar esta parte del espacio. que es similar al método compacto ByteBuffer. Los datos entre lectorIndex-writerIndex son legibles, equivalente a los datos entre el límite de posición en ByteBuffer.

El espacio entre la capacidad de escritorIndex es escribible, equivalente al espacio entre. capacidad límite en ByteBuffer.

La lectura solo afecta a ReaderIndex y la escritura solo afecta a WriterIndex. No es necesario ajustar la posición del puntero entre lectura y escritura, por lo que se puede simplificar enormemente en comparación con ByteBuffer de NIO. y operaciones de escritura

Llamar a descartaReadBytes provocará la copia de memoria de la matriz de bytes, por lo que las llamadas frecuentes provocarán una degradación del rendimiento

ByteBuf encapsula la operación de escritura y la operación de escritura de ByteBuf es responsable para ello se verifica el espacio restante. Si el búfer disponible es insuficiente, ByteBuf se expandirá automáticamente de forma dinámica.

Para los usuarios, no es necesario preocuparse por los detalles de expansión de la suma de comprobación subyacente, siempre que la capacidad no exceda la capacidad.

Al leer el búfer, a veces necesitamos revertir la operación anterior. la operación de lectura no cambiará el contenido del búfer. La reversión restablece principalmente la información del índice

Marcar: divide el puntero de posición actual en la variable de marca

Restablecer: restaura El puntero de posición es el valor de variable en mark

ByteBuf tiene ReaderIndex y WriterIndex, por lo que hay cuatro métodos correspondientes

markReaderIndex: realiza una copia de seguridad del ReaderIndex actual en MarkedReaderIndex

resetReaderIndex: establece el índice de lector actual en índice de lector marcado

markWriterIndex: haga una copia de seguridad del índice de lector actual en índice de escritor marcado

resetWriterIndex: establezca el índice de lector actual en índice de escritor marcado

3) segmento:

Devuelve el subbúfer legible del ByteBuf actual, es decir, el ByteBuf de ReaderIndex a WriterIndex. El ByteBuf devuelto comparte el contenido con el búfer original, pero mantiene un índice independiente cuando se modifica uno de ellos. de ByteBuf se cambia, el otro también cambiará, es decir, ambas partes tienen una referencia al mismo objeto

Clases comunes:

En comparación con PooledHeapByteBuf, la implementación de UnpooledHeapByteBuf es más simple, no es fácil tener problemas de administración de memoria, por lo que se recomienda usar UnpooledHeapByteBuf cuando el rendimiento sea satisfactorio.

Use DirectByteBuf en el búfer de lectura y escritura del hilo de comunicación de E / S. HeapByteBuf para codificar mensajes comerciales de back-end, esta combinación tiene el mejor rendimiento

.