En programación informática , una netstring es un método de formato para cadenas de bytes que utiliza una notación declarativa para indicar el tamaño de la cadena. [ 1 ] [ 2 ]
Netstrings almacena la longitud en bytes de los datos que le siguen, lo que facilita el paso inequívoco de texto y datos en 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 consiste en la longitud de la cadena escrita con dígitos ASCII, seguida de dos puntos, los datos en bytes y una coma. En este contexto, "longitud" se refiere al número de unidades de 8 bits; por lo tanto, si la cadena está codificada, por ejemplo, en UTF-8 , esta longitud puede o no coincidir con el número de caracteres textuales presentes en la cadena.
Por ejemplo, el texto "¡hola mundo!" se 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 facilita ligeramente la lectura de las cadenas de red utilizadas como registros adyacentes y proporciona una verificación básica del análisis sintáctico correcto. Cabe destacar que, sin la coma, el formato reproduce la forma en que Bencode codifica las cadenas.
La longitud se escribe sin ceros iniciales. La cadena vacía es la única netstring que comienza con cero. Existe exactamente una codificación netstring válida para cualquier cadena de bytes .
Dado que el formato es fácil de generar y analizar , resulta sencillo que programas escritos en distintos lenguajes de programación lo admitan. 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, véase su uso en la Interfaz de Puerta de Enlace Común Simple (SCGI) y el Protocolo de Cola de Correo Rápido (QMQP).
Netstrings evita 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 compleja de escape y delimitación , mientras que la generación de mensajes MIME multipart implica elegir un delimitador que no debe entrar en conflicto con el contenido de los datos.
Las cadenas de red se pueden almacenar de forma recursiva. El resultado de codificar una secuencia de cadenas es una sola cadena. Si reescribimos el ejemplo anterior de "¡hola mundo!" para que sea una secuencia de dos cadenas de red, codificadas a su vez como una sola cadena de red, obtenemos lo siguiente:
17 : 5 : hola , 6 : ¡mundo! , ,
Analizar una cadena de red anidada de este tipo es un ejemplo de tipado dinámico (duck typing ), ya que la cadena contenida ("5:hello,6:world!,") es a la vez una cadena y una secuencia de cadenas de red. Su tipo efectivo viene determinado por cómo la aplicación decide interpretarla, no por ninguna declaración de tipo explícita requerida por la especificación de la cadena de red. En general, hay tres maneras en que un programa que espera una cadena de red puede interpretar su contenido:
- Como texto legible para 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 , se utiliza una convención de unión etiquetada para describir los tipos de netstrings anidadas, estableciendo así un formato de serialización de datos jerárquico autodescriptivo . ("Netstrings etiquetadas" y Bencode pueden considerarse extensiones de netstring que admiten formatos jerárquicos autodescriptivos 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, no se pueden incrustar textualmente en la mayoría de los formatos delimitados sin la posibilidad de interferir con la delimitación del formato contenedor.
En el contexto de la programación de redes, resulta potencialmente útil que el programa receptor esté informado del tamaño de los datos que le siguen, ya que puede asignar la cantidad exacta de memoria necesaria, evitar la necesidad de reasignarla para acomodar más datos y rechazar de forma preventiva los datos que excedan los límites de tamaño .
Véase también
Notas y referencias
- ↑ definido en un documento de DJ Bernstein .
- ↑ Véase, por ejemplo, Python Web Programming de Steve Holden y David M. Beazley, publicado por Sams Publishing en 2002 (ISBN) . 0-7357-1090-2, 978-0-7357-1090-0 691 páginas, página 202.
- ^ Caolan McMahon. "Bencodificación" .
- ↑ "Especificación de TNetstrings" . Archivado del original el 11 de mayo de 2024.
- ↑ tnetstring-rb
- ↑ "tnetstring: la especificación de netstring etiquetada"
- ↑ "tnetstring: serialización de datos mediante netstrings tipadas"
Enlaces externos
- http://cr.yp.to/proto/netstrings.txt
- http://wiki.tcl.tk/15074
- formatos de serialización de datos
- Estructuras de datos de cadena