En programación de computadoras , una cadena de red es un método de formato para cadenas de bytes que usa una notación declarativa para indicar el tamaño de la cadena. [1] [2]
Las cadenas de red almacenan la longitud de bytes de los datos que siguen, lo que facilita el paso inequívoco de texto y datos de bytes entre programas que podrían ser sensibles a valores que podrían interpretarse como delimitadores o terminadores (como un carácter nulo ).
El formato consta de la longitud de la cadena escrita con dígitos ASCII, seguida de dos puntos, los datos del byte y una coma. "Longitud" en este contexto significa "número de unidades de 8 bits", por lo que si la cadena está, por ejemplo, codificada con UTF-8 , esto puede ser o no idéntico al número de caracteres textuales que están presentes en la cadena. .
Por ejemplo, el texto "¡hola mundo!" codifica como:
< 31 32 3a 68 65 6c 6c 6f 20 77 6f 72 6c 64 21 2c >
es decir
12 : ¡ hola mundo! ,
Y una cadena vacía como:
< 30 3a 2c >
es decir
0 : ,
La coma hace que sea un poco más simple para los humanos leer cadenas de red que se utilizan como registros adyacentes y proporciona una verificación débil del análisis correcto. Tenga en cuenta que sin la coma, el formato refleja cómo Bencode codifica las cadenas.
La longitud se escribe sin ceros a la izquierda. La cadena vacía es la única cadena de red que comienza con cero. Existe exactamente una codificación de cadena de red legal para cualquier cadena de bytes .
Dado que el formato es fácil de generar y analizar , es fácil de admitir mediante programas escritos en diferentes lenguajes de programación. En la práctica, las cadenas de red se utilizan a menudo para simplificar el intercambio de cadenas de bytes o listas de cadenas de bytes. Por ejemplo, consulte su uso en la Interfaz de puerta de enlace común simple (SCGI) y el Protocolo de cola de correo rápido (QMQP).
Las cadenas de red evitan las complicaciones que surgen al intentar incrustar datos arbitrarios en formatos delimitados. Por ejemplo, XML puede no contener ciertos valores de bytes y requiere una combinación no trivial de escape y delimitación , mientras que la generación de mensajes MIME de varias partes implica elegir un delimitador que no debe chocar con el contenido de los datos.
Las cadenas de redes se pueden almacenar de forma recursiva. El resultado de codificar una secuencia de cadenas es una sola cadena. Reescribiendo el anterior "¡hola mundo!" ejemplo para ser en su lugar una secuencia de dos cadenas de red, codificada a su vez como una cadena de red única, da lo siguiente:
17 : 5 : hola , 6 : ¡mundo! , ,
Analizar una cadena de red anidada de este tipo es un ejemplo de escritura pato , ya que la cadena contenida ("5: hola, 6: mundo!") Es tanto una cadena como una secuencia de cadenas de red. Su tipo efectivo está determinado por cómo la aplicación elige interpretarlo, no por ninguna declaración de tipo explícita requerida por la especificación netstring. En general, hay 3 formas en que un programa que espera una cadena de red puede elegir interpretar su contenido:
- Como texto legible por humanos sin procesamiento automático adicional
- Como datos encapsulados en algún formato de serialización de datos fijo preestablecido (como el contenido binario de una estructura C o C ++)
- Como metadatos y datos encapsulados , utilizando una convención de unión etiquetada para describir los tipos de cadenas de red anidadas, estableciendo así un formato de serialización de datos jerárquico autodescriptivo . ("Tagged netstrings" y Bencode pueden verse como extensiones de netstring que admiten formatos jerárquicos de autodescripción similares [3] [4] [5] [6] [7] )
Tenga en cuenta que dado que las cadenas de red no imponen limitaciones en el contenido de los datos que almacenan, las cadenas de red no se pueden incrustar literalmente en la mayoría de los formatos delimitados sin la posibilidad de interferir con la delimitación del formato que las contiene.
En el contexto de la programación de la red, es potencialmente útil que el programa receptor esté informado del tamaño de los datos que siguen, ya que puede asignar exactamente suficiente memoria, evitar la necesidad de reasignación para acomodar más datos y rechazar de forma preventiva los datos que excederían límites de tamaño .
Ver también
notas y referencias
- ^ definido en un documento de DJ Bernstein .
- ^ Ver, por ejemplo, Programación web Python por Steve Holden, David M. Beazley Publicado por Sams Publishing, 2002 ISBN 0-7357-1090-2 , 978-0-7357-1090-0 691 páginas, página 202.
- ^ Caolan McMahon. "Bencoding" .
- ^ "Especificación TNetstrings" . Archivado desde el original el 10 de febrero de 2014.
- ^ tnetstring-rb
- ^ "tnetstring: la especificación de netstring etiquetada"
- ^ "tnetstring: serialización de datos usando cadenas de red escritas"
enlaces externos
- http://cr.yp.to/proto/netstrings.txt
- http://wiki.tcl.tk/15074